2009-09-10 1 views
5

Hier sind die relevanten Teile der XAML-Datei zu arbeiten:Kann nicht bekommen ListBox und Update

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.

Zu einem bestimmten Zeitpunkt füge ich Elemente zum Wörterbuch hinzu und möchte, dass die ListBox die Änderungen widerspiegelt. Dieser
ist der Code Ich dachte über die Verwendung, aber es funktioniert nicht:

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

Dieser Code stattdessen funktioniert:

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

Ich würde es vorziehen Update zu verwenden, aber ich kann es nicht bekommen arbeiten.
Was mache ich falsch?

Antwort

11

Die Bindung von Elementen wird anders gehandhabt als die Standardbindung von DependencyProperty s in WPF (speziell durch ItemsControl s).

Ich glaube, Sie so etwas wie die folgenden wollen:

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. Weitere Informationen finden Sie unter the MSDN page.

+0

Danke, es hat perfekt funktioniert. – RobSullivan