我一直在下载大量示例代码,以帮助我更好地了解Silverlight中的MVVM。
我注意到的一件事是我下载的示例代码中的不一致。例如,有些在视图模型上实现了INotifyPropertyChanged,其他人在模型上实现了它。
如果在模型级别或视图模型级别处理属性更改,首选哪种方法?
答案 0 :(得分:2)
如果要通过数据绑定更新视图中显示的项目,则视图模型中的处理(通知)属性更改似乎更自然。
首先拥有视图模型的原因之一是它保存模型中的数据,使视图很容易绑定到它。
因此,如果INotifyPropertyChange的主要原因是更新视图中绑定的项目,则应在viewmodel中更新它。
答案 1 :(得分:1)
我通常使用DependencyProperty
代替INotifyPropertyChanged
,但这个想法是一样的。
他们的目的是通知他们已经更改的视图控件,以便视图可以更新。这意味着视图与保存属性或对象的任何东西之间的连接很弱。在MVVM中,由于关注点分离,视图不应该与模型有任何链接。
我经常会通过为每个视图,视图模型和模型创建一个单独的项目来强制执行此操作。因此,您的问题的答案是INotifyPropertyChanged
应该在viewmodel级别实现,因为视图永远不会触及模型级别的任何内容。话虽如此,MVVM只是一种编程范式,可以让程序员的工作变得更轻松,因此可能有理由以不同的方式实现它,如果这意味着让您的工作更轻松并且不会产生任何负面影响。