2009-09-10 5 views
5

Voici les parties pertinentes du fichier XAML:Impossible LISTBOX et UpdateTarget à travailler

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 est une classe statique public et est une propriété Dic publique statique, un dictionnaire.

À un certain point, j'ajoute des éléments au dictionnaire et je voudrais que le contrôle ListBox reflète les changements.
C'est le code que je pensais à l'aide, mais il ne fonctionne pas:

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

Ce code fonctionne à la place:

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

Je préférerais utiliser UpdateTarget, mais je ne peux pas l'obtenir travailler.
Qu'est-ce que je fais de mal?

Répondre

11

La liaison d'éléments est gérée plutôt différemment que la liaison standard de DependencyProperty s dans WPF (plus précisément, par ItemsControl s).

Je pense que vous voulez quelque chose comme ce qui suit:

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

Il est en fait l'objet ICollectionView que vous voulez rafraîchir. C'est effectivement l'objet qui gère la liaison de collection pour vous. Voir the MSDN page pour plus d'informations.

+0

Merci, cela a fonctionné parfaitement. – RobSullivan

Questions connexes