ObservableCollection
是一个专门的集合,可以通知用户时,其内容变化,而INotifyPropertyChanged
是一个接口,允许实现者通知用户,当他们属性之一变化值。
你可能想知道两者是如何关联(因为两者都是在二传手在你的榜样“参与”)。
考虑以下代码:
var model = new MyViewModel(); // assume it's the class with Payments inside
model.Payments.Add(new PaymentViewModel());
认购到INotifyCollectionChanged.CollectionChanged
事件现在就会知道,事情发生了变化,他们应该相应地更新。
但是现在看看这个:
var model = new MyViewModel(); // assume it's the class with Payments inside
model.Payments.Add(new PaymentViewModel()); // OK, we know what this does
model.Payments = new ObservableCollection<PaymentViewModel>();
将项目添加到集合之后,我们掉一个又一个整个集合。如果一个ItemsControl
绑定到这个集合,我们希望它自己更新并反映model.Payments
最终为空的事实。但它怎么能这样做呢?
CollectionChanged
将没有帮助,因为原来的收集(接收其第一个项目后)不被修改;我们只是丢弃它,并安装另一个。唯一知道交换机发生的是属性设置器Payments
。因此,制定者利用INotifyPropertyChanged
告诉订户该集合已被替换为另一个,并且他们当然应该更新其状态。
结论:自动的在WPF数据绑定的工作方式,因为所有的数据绑定控件听取他们的DataContext
,的INotifyPropertyChanged
和如果绑定目标实现,他们订阅的还有INotifyCollectionChanged
。如果绑定目标发生变化,则通过INotifyPropertyChanged
通知他们,退订旧目标上的INotifyCollectionChanged
,并在新目标上订阅。
来源
2012-04-20 13:19:10
Jon
我也明白你的答案。你也给出了很好的答案。谢谢。 – pratikjgandhi 2012-04-20 13:50:39