【问题标题】:Binding List and UI controls, not updating on edit绑定列表和 UI 控件,在编辑时不更新
【发布时间】:2011-12-22 15:25:35
【问题描述】:

我以两种方式将 BindingList 绑定到列表框。绑定列表包含许多图像,如果从绑定列表中添加或删除项目,这些图像显然只会更新列表框。如何使绑定列表在修改项目时也引发 listchanged 事件?

编辑:我发现我遇到的问题是对象的属性没有被更改,而是基础对象。

BindingList<ImageSource>();

但是,如果我这样做,这将不起作用:

BindingList<Image>();

然后将绑定路径设置为 Image.Source,它将正确更新,这是因为 Image 的属性已更改,但在第一个示例的情况下,仅列表中的直接项已更改。那么如何才能获得与第二个示例相同的行为呢?

最终编辑:似乎使用 ObservableCollection 而不是 BindingList 可以解决此问题。我的印象是它们在通知集合的变化方面是相同的。完整答案如下

【问题讨论】:

    标签: c# wpf image controls bindinglist


    【解决方案1】:

    BindingListObservableCollection 的不同之处在于 BindingList 不会通知其直接项目已更改(除非从集合中添加或删除项目)。然而 ObservableCollection 实现了 INotifyCollectionChanged 和 INotifyPropertyChanged 接口。这意味着对 ObservableCollection 的直接项的任何更改都会报告给 UI。

    如果您使用绑定来引导项目并且需要更新项目而不是这些项目的属性,那么您似乎必须使用 ObservableCollection。另一种解决方案是从 BindingList 派生并实现 INotifyCollectionChanged。

    我不是专家,但这是我在过去一小时收集的内容,如果有人有什么要补充或更正的,请告诉我。

    【讨论】:

      【解决方案2】:

      该列表确实会引发该事件,但前提是基础项目通过 INotifyPropertyChanged 提供适当的通知。

      【讨论】:

      • 我明白这一点,但它似乎没有按预期工作。实际绑定在数据模板中,如下所示:&lt;Image Source="{Binding Path=TheImage.Source, Mode=TwoWay}" Stretch="None" /&gt; 据我所知 ImageSource 有一个依赖属性并且有一个 OnPropertyChanged 方法,为什么它不能工作?
      • @gummy24: Image.Source 属性不是问题,TheImage 的类型在这种情况下需要通知更改。
      • WPF 中又一个执行不力的事情。我什至调用了 bindingList.ResetItem 并且网格仍然没有更新。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多