我很好奇ViewModels
最好的做法是什么。是否更好地实现接口INotifyPropertyChanged
或从ObservableObject
派生。
ObservableObject
类实现INotifyPropertyChanged
并执行一些无聊的代码,例如RaisePropertyChanged
。
INotifyPropertyChanged
需要实施PropertyChanged
事件。
从我的角度来看,使用ObservableObject
似乎更合乎逻辑,但在大多数教程中,他们在INotifyPropertyChanged
上实现了ViewModel
界面。
你认为这是为了简单还是有逻辑原因?
答案 0 :(得分:15)
ObservableObject
是Microsoft.Practices.Composite.Presentation的一部分 - 即Prism。它也已在MVVM Light和MVVM Foundation中实施。
INotifyPropertyChanged
是System.ComponentModel的一部分 - 即它位于核心库中。
所以,如果你还没有包括Prism或其他框架我坚持使用INotifyPropertyChanged
。包括它只是为了得到这一类似乎没什么意义。
答案 1 :(得分:2)
我甚至可以说,如果你实现了很多ViewModel,那么实现INotifyPropertyChanged需要很多管道代码,你最好创建自己的ViewModel基类,或者使用一个由MVVM框架为您提供的(MVVM Light是我选择的框架)。
否则,你真的不是很“干”(不要重复自己)。
编辑 - 无意识的想法
请记住,ObservableObject通常只是ViewModel类相同基本内容的轻量级实现,为您提供INPC,但忽略了您可能在完整ViewModel中使用的其他一些内容。
答案 2 :(得分:0)
通常,在其他条件相同的情况下,我建议采用一种方法来实现接口,而不是从祖先类派生。您可以根据需要实现尽可能多的接口,但是您只能获得一个父级,因此我更愿意“明智地”使用我的父级。在我可以获得我想要实现的接口的情况下,我更愿意稍后将我的选项保留为继承。