2

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

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

BindingList<ImageSource>();

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

BindingList<Image>();

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

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

4

2 回答 2

2

该列表确实会引发该事件,但前提是基础项目通过INotifyPropertyChanged.

于 2011-11-05T12:55:49.727 回答
2

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

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

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

于 2011-11-05T21:13:32.263 回答