c# - 无法让 ListBox 和 UpdateTarget 工作

标签 c# .net wpf data-binding listbox

以下是 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/

相关文章:

c# - 如何在 ServiceStack 中进行身份验证后重定向

c# - Vista下如何为所有用户保存设置

c# - .Net 是否支持柯里化(Currying)泛型?

c# - IEquatable - 覆盖等于 - 检查空值

c# - 如何禁用所有按钮

c# - 将 HttpWebRequest 重构为 HttpClient?

c# - 列表框和数据触发器

wpf - 提取正在运行的WPF应用程序的WPF内容模板

c# - 如何在 DataGrid 和 CollectionViewSource 之间同步排序标记?

c# - 使用自定义编码或添加自定义字符