Frage

Hier sind die relevanten Teile der XAML -Datei:

xmlns:local="clr-namespace:BindingTest"
<ListBox x:Name="myList"
         ItemsSource="{Binding Source={x:Static local:MyClass.Dic},
                               Path=Keys,
                               Mode=OneWay,
                               UpdateSourceTrigger=Explicit}">
</ListBox>

Myclass ist eine öffentliche statische Klasse und DIC ist ein statisches öffentliches Eigentum, ein Wörterbuch.

An einem bestimmten Punkt füge ich dem Wörterbuch Elemente hinzu und möchte, dass die Listbox die Änderungen widerspiegelt.
Dies ist der Code, über den ich gedacht habe, aber er funktioniert nicht:

BindingExpression binding;
binding = myList.GetBindingExpression(ListBox.ItemsSourceProperty);
binding.UpdateTarget();

Dieser Code funktioniert stattdessen:

myList.ItemsSource = null;
myList.ItemsSource = MyClass.dic.Keys;

Ich würde lieber UpdateTarget verwenden, aber ich kann es nicht zum Laufen bringen.
Was mache ich falsch?

War es hilfreich?

Lösung

Die Bindung von Gegenständen wird ziemlich unterschiedlich als Standardbindung von behandelt DependencyPropertys in WPF (speziell von ItemsControls).

Ich denke, Sie wollen so etwas wie Folgendes:

var itemsView = CollectionViewSource.GetDefaultView(myListBox.ItemsSource);
itemsView.Refresh()

Es ist in der Tat das ICollectionView Objekt, das Sie aktualisieren möchten. Dies ist effektiv das Objekt, das die für Sie bindende Sammlung verwaltet. Sehen Die MSDN -Seite Für mehr Information.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top