【问题标题】:Can't get ListBox and UpdateTarget to work无法让 ListBox 和 UpdateTarget 工作
【发布时间】:2010-11-27 07:33:34
【问题描述】:

以下是 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 并希望 ListBox 反映更改。
这是我想使用但不起作用的代码:

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

此代码可以代替:

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

我更喜欢使用 UpdateTarget,但我无法让它工作。
我做错了什么?

【问题讨论】:

    标签: c# .net wpf data-binding listbox


    【解决方案1】:

    项目绑定的处理方式与 WPF 中 DependencyPropertys 的标准绑定不同(特别是 ItemsControls)。

    我认为您想要以下内容:

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

    实际上是您要刷新的ICollectionView 对象。这实际上是为您管理集合绑定的对象。请参阅the MSDN page 了解更多信息。

    【讨论】:

      【解决方案2】:

      扩展 Noldorin 先前的回答,您可以挂钩到 PropertyChanged 事件,以便在您的模型更新时自动发生:

      public partial class YourView {
        public YourView () {
          InitializeComponent();
          ViewModel=YourDataObject;
          ViewModel.PropertyChanged+=OnUpdateYourDataObject;
        }
        public YourDataObject? ViewModel {
          get => DataContext as YourDataObject;
          set => DataContext=value;
        }
        public void OnUpdateYourDataObject(object? sender, PropertyChangedEventArgs? e) => 
              CollectionViewSource.GetDefaultView(YourListBox.ItemsSource).Refresh();
       }
      

      将 YourDataObject 和 YourListBox 替换为正确的值。每当您的对象上的属性发生更改时,这将自动更新您的视图。我不确定为什么不自动处理这件事,但我无法弄清楚如何设置。

      【讨论】:

        猜你喜欢
        • 2021-06-07
        • 2017-04-24
        • 2015-05-02
        • 1970-01-01
        • 1970-01-01
        • 2014-04-10
        • 2021-08-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多