如何在MVVM模式中实现INotifyPropertyChanged和observableCollection?

时间:2011-04-06 17:44:58

标签: silverlight mvvm

我在模型中有一个ObservableCollection产品,我希望ViewModel监听ObservableCollection产品中的任何变化。

我不确定如何去实施它。我已经阅读了几个教程,但大多数都不是特定于MVVM的。

我应该在ViewModel类中实现INotifyPropertyChanged,如何指定我想听产品的OberserableCollection?

谢谢:)

2 个答案:

答案 0 :(得分:3)

ObservableCollection已经实现了INotifyPropertyChanged,因此您不需要。

答案 1 :(得分:3)

我知道这已经得到了解答,但还有更多需要考虑。

1)ViewModel应该实现INotifyPropertyChanged,这是使其成为ViewModel的东西之一。即使在它暴露的唯一属性是ObservableCollection的不太可能的情况下,当实际的ObservableColelction属性发生变化时,它还需要提高属性(在第3项中更多内容)

2)你真的希望ViewModel监听这些变化还是View?这是两件不同的事情。 ViewModel应该包含一个ObservableCollection,然后绑定到View。您想要的是View对这些更改做出反应。在这种情况下,Brandon是正确的,ObservableCollection为您提供了开箱即用的功能。因此,View将ViewModel的一个实例设置为DataContext,并且View中的一些可视元素绑定到ObservableCollection(就像ListBox上的ItemsSource一样)。

3)异常是ViewModel中的ObservableCollection属性本身。虽然ObservableCollection实现了INotifyPropertyChanged,但它是集合对象的一部分:当ViewModel中的对象引用发生更改(如重新创建)时,ViewModel仍然需要报告ObservableCollection的Property已更改。

只是一些想法。