ViewModel上的ObservableObject或INotifyPropertyChanged

时间:2012-04-10 17:06:57

标签: c# wpf visual-studio-2010

我很好奇ViewModels最好的做法是什么。是否更好地实现接口INotifyPropertyChanged或从ObservableObject派生。

ObservableObject类实现INotifyPropertyChanged并执行一些无聊的代码,例如RaisePropertyChanged

INotifyPropertyChanged需要实施PropertyChanged事件。

从我的角度来看,使用ObservableObject似乎更合乎逻辑,但在大多数教程中,他们在INotifyPropertyChanged上实现了ViewModel界面。

你认为这是为了简单还是有逻辑原因?

3 个答案:

答案 0 :(得分:15)

ObservableObject是Microsoft.Practices.Composite.Presentation的一部分 - 即Prism。它也已在MVVM LightMVVM Foundation中实施。

INotifyPropertyChanged是System.ComponentModel的一部分 - 即它位于核心库中。

所以,如果你还没有包括Prism或其他框架我坚持使用INotifyPropertyChanged。包括它只是为了得到这一类似乎没什么意义。

答案 1 :(得分:2)

我甚至可以说,如果你实现了很多ViewModel,那么实现INotifyPropertyChanged需要很多管道代码,你最好创建自己的ViewModel基类,或者使用一个由MVVM框架为您提供的(MVVM Light是我选择的框架)。

否则,你真的不是很“干”(不要重复自己)。

编辑 - 无意识的想法

请记住,ObservableObject通常只是ViewModel类相同基本内容的轻量级实现,为您提供INPC,但忽略了您可能在完整ViewModel中使用的其他一些内容。

答案 2 :(得分:0)

通常,在其他条件相同的情况下,我建议采用一种方法来实现接口,而不是从祖先类派生。您可以根据需要实现尽可能多的接口,但是您只能获得一个父级,因此我更愿意“明智地”使用我的父级。在我可以获得我想要实现的接口的情况下,我更愿意稍后将我的选项保留为继承。