【问题标题】:When using ObservableCollection<T>, do I still need to implement INotifyPropertyChanged on type T?使用 ObservableCollection<T> 时,是否还需要在类型 T 上实现 INotifyPropertyChanged?
【发布时间】:2012-05-04 16:50:37
【问题描述】:
【问题讨论】:
标签:
.net
observablecollection
inotifypropertychanged
【解决方案1】:
将您的可观察集合视为表的数据源。集合中的每个对象占据一行,并跨多列显示在表格中。
视图(即您的表格)需要知道何时修改每个单元格以响应对象属性的变化,以及响应向集合中添加和删除对象。
您的可观察集合负责处理表行:当对象被插入、移除、移动等时,它会通知其观察者。但是,它缺乏对单个对象的了解,因此对处理表列没有帮助。
这就是你的对象的用武之地:通过实现INotifyPropertyChanged,它们让你的表管理列中的数据。
【讨论】:
-
这与通知集合内容的变化有关(可以添加、更新和删除项目)。收集容器变化的通知呢?视图绑定的属性,类型为 ObservableCollection 也必须分配并且可以更改。我假设 INPC 必须在此属性的设置器中实现(除非它是依赖属性),但许多代码摘录并未显示此实现。正确的? This answer 说是,但在我看到之前有 0 票。
【解决方案2】:
INotifyPropertyChanged 需要由其属性正在更改的对象引发。 ObservableCollection 不能简单地检测它包含的对象的变化并代表您传递这些变化。
集合实现INotifyPropertyChanged 的原因并不是特别有用。我怀疑它只会为集合的Count 属性引发一个更改事件,该事件会随着项目被添加/删除到集合中而改变。
如果您只对添加/删除的项目感兴趣,您可能不需要在您的类中实现此接口。但是,如果您的 UI 绑定到对象的属性,如果您希望 UI 做出反应,则需要实现它。