9

ObservableCollection<T>注释的 MSDN 参考页面:

“您的集合中的对象必须满足绑定源概述中描述的要求。特别是,如果您使用OneWayTwoWay(例如,您希望您的 UI 在源属性动态更改时更新),您必须实现一个合适的属性更改通知机制,例如INotifyPropertyChanged接口。"

既然ObservableCollection<T>已经实施了INotifyPropertyChanged,为什么我还需要再次实施INotifyPropertyChangedT

4

2 回答 2

10

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

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

你的 observable 集合负责处理表中的行:当一个对象被插入、移除、移动等等时,它会通知它的观察者。但是,它缺乏对单个对象的了解,因此对处理表列没有帮助。

这就是你的对象进来的地方:通过实现INotifyPropertyChanged它们让你的表管理列中的数据。

于 2012-04-24T03:35:21.400 回答
3

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

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

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

于 2012-04-24T03:35:12.500 回答