使用ObservableCollection <t>时,是否仍需要在类型T上实现INotifyPropertyChanged?</t>

时间:2012-04-24 03:23:50

标签: .net observablecollection inotifypropertychanged

The MSDN reference page for ObservableCollection<T>说明:

  

“您的收藏集中的对象必须满足Binding Sources Overview中描述的要求。特别是,如果您使用OneWayTwoWay(例如,您希望更新用户界面)当源属性动态更改时,您必须实现适当的属性更改通知机制,例如INotifyPropertyChanged接口。“

由于ObservableCollection<T>已经实施INotifyPropertyChanged,为什么我还需要在INotifyPropertyChanged上再次实施T

2 个答案:

答案 0 :(得分:9)

将您的可观察集合视为表的数据源。集合中的每个对象占用一行,并在多个列的表中显示。

视图(即您的表)需要知道何时修改每个单元格以响应对象的更改属性,还要响应在集合中添加和删除对象。

您的observable集合负责处理表行:它会在插入,移除,移动对象时通知其观察者。但是,它缺乏对单个对象发生了什么的了解,因此处理表列没有任何帮助。

这是您的对象进入的地方:通过实施INotifyPropertyChanged,您可以让您的表管理列中的数据。

答案 1 :(得分:3)

INotifyPropertyChanged需要由属性正在发生变化的对象引发。 ObservableCollection无法简单地检测其中包含的对象中的更改,并代表您传递这些更改。

集合实现INotifyPropertyChanged的原因并不是特别有用。我怀疑它只会为集合的Count属性引发一个更改事件,该事件会随着项目添加/删除到集合中而发生变化。

如果您只对要添加/删除的项目感兴趣,则可能不需要在班级中实现此界面。但是,如果您的UI绑定到对象的属性,那么如果您希望UI做出反应,则需要实现它。