以下是XAML文件的相关部分:
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是一个公共静态类,Dic是一个静态公共属性,一个Dictionary.
在某一点上,我将项添加到Dictionary并希望ListBox反映更改.
这是我想要使用的代码,但它不起作用:
BindingExpression binding; binding = myList.GetBindingExpression(ListBox.ItemsSourceProperty); binding.UpdateTarget();
相反,此代码有效:
myList.ItemsSource = null; myList.ItemsSource = MyClass.dic.Keys;
我更喜欢使用UpdateTarget,但我不能让它工作.
我究竟做错了什么?
解决方法
项目的绑定处理方式与WPF中DependencyPropertys的标准绑定(特别是ItemsControls)的处理方式截然不同.
我想你想要的东西如下:
var itemsView = CollectionViewSource.GetDefaultView(myListBox.ItemsSource); itemsView.Refresh()
事实上,您要刷新的ICollectionView对象.这实际上是为您管理集合绑定的对象.有关详细信息,请参阅the MSDN page.