以下是 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 是一个公共(public)静态类,Dic 是一个静态公共(public)属性,一个字典。
在某个时候,我将项目添加到字典中,并希望列表框反射(reflect)更改。
这是我考虑使用的代码,但它不起作用:
BindingExpression binding;
binding = myList.GetBindingExpression(ListBox.ItemsSourceProperty);
binding.UpdateTarget();
这段代码反而有效:
myList.ItemsSource = null;
myList.ItemsSource = MyClass.dic.Keys;
我更愿意使用 UpdateTarget,但我无法让它工作。
我做错了什么?
最佳答案
项目绑定(bind)的处理方式与 WPF 中 DependencyProperty
的标准绑定(bind)(具体而言,由 ItemsControl
处理)完全不同。
我想你想要像下面这样的东西:
var itemsView = CollectionViewSource.GetDefaultView(myListBox.ItemsSource);
itemsView.Refresh()
它实际上是您要刷新的 ICollectionView
对象。这实际上是为您管理集合绑定(bind)的对象。参见 the MSDN page了解更多信息。
关于c# - 无法让 ListBox 和 UpdateTarget 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1407609/