WPF: PropertyChangedCallback nur einmal ausgelöst

Ich habe ein user control, das macht eine DependencyProperty genannt VisibileItems
Jedes mal, wenn die Eigenschaft aktualisiert wird, muss ich zum auslösen eines anderen Ereignisses.
Um das zu erreichen, habe ich ein FrameworkPropertyMetadata mit PropertyChangedCallback Veranstaltung.

Für einige Grund, dieses event wird nur einmal aufgerufen, und nicht Auslöser der nächsten Zeit VisibleItems geändert wird.

XAML:

<cc:MyFilterList VisibleItems="{Binding CurrentTables}"  />

CurrentTables ist eine DependencyProperty auf MyViewModel. CurrentTables wird oft geändert. Ich kann binden ein weiteres WPF-Steuerelement zu CurrentTables, und ich sehe die änderungen in der Benutzeroberfläche.

Hier ist die Art, wie ich WLAN VisibleItems mit PropertyChangedCallback

public static readonly DependencyProperty VisibleItemsProperty =
    DependencyProperty.Register(
    "VisibleItems",
    typeof(IList),
    typeof(MyFilterList),
    new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsRender, new PropertyChangedCallback(VisiblePropertyChanged))

    );

public IList VisibleItems {
    get { return (IList)GetValue(VisibleItemsProperty); }
    set { SetValue(VisibleItemsProperty, value); }
}

durch treten in VisiblePropertyChanged, ich kann sehen, dass es wird ausgelöst, das erste mal CurrentTables festgelegt wird. nicht aber die folgenden Male.

UPDATE

wie einige von Euch bezweifelt, dass die Art und Weise CurrentTables geändert wird, ist es wieder zugewiesen komplett auf ändern:

OnDBChange()...
CurrentTables = new List<string>(MainDatabaseDataAdapter.GetTables(this.SelectedServer, this.SelectedDatabase));

diese Zeile aufgerufen wird, wird bei jeder änderung, aber meine VisiblePropertyChanged-handler aufgerufen wird, wird nur die erste Zeit.

UPDATE

wenn ich diesen VisibleItems direkt, der handler wird aufgerufen, jedes mal!

TestFilterList.VisibleItems = new List<string>( Enumerable.Range(1, DateTime.Now.Second).ToList().Select(s => s.ToString()).ToList() );

So, wie es aussieht, das problem ergibt sich aus der DependencyProperty (VisibleItems) und ein anderes anschauen DependencyProperty (CurrentTables). Irgendwie ist die Bindung funktioniert auf den ersten Eigenschaft zu ändern, aber nicht auf die nachfolgenden?
Versuch untersuchen dieses Problem mit snoop wie einige von Euch vorgeschlagen.

  • Sind Sie sicher, dass die Bindung erhalten bleibt? Ich würde Snoop, um zu überprüfen, dass die Bindung der Aktualisierung der VisibleItems Eigenschaft richtig.
  • Sie impliziert, aber nicht explizit: "sind Sie sicher, dass VisibleItems tatsächlich änderungen auf einen anderen Wert, ohne die Eigenschaft geändert callback aufgerufen wird?
  • Rick, ja ich bin sicher, ich kann Schritt für Schritt durch und sehen, dass es aufgerufen wird, und jetzt habe ich eine "neue Liste" bei jedem Anruf, um sicher zu sein es ist nicht die gleiche Instanz. aber auch wenn man sich den code können Sie sehen, dass es wird die Liste aus der Datenbank zu jeder Zeit.
  • Das beweist, dass CurrentTables verändert sich nicht beweisen, dass VisibleItems verändert. Ihre Bindung gebrochen oder so etwas. Ich vermute, dass VisibleItems ist eigentlich nicht ändern, das ist, warum ich empfehle, mit Snoop zu stellen Sie sicher, dass die Bindung funktioniert.
  • kramer, Recht auf. ich habe einen anderen test und es tatsächlich scheint, dass das problem irgendwo zwischen VisibleItems und CurrentTables... müssen tun einige Untersuchung, um zu sehen, warum Sie funktionieren auf Anhieb, aber nicht die anschließende..
InformationsquelleAutor Sonic Soul | 2011-04-26
Schreibe einen Kommentar