MVVM与Silverlight

时间:2012-02-11 19:44:18

标签: silverlight mvvm inotifypropertychanged

我一直在下载大量示例代码,以帮助我更好地了解Silverlight中的MVVM。

我注意到的一件事是我下载的示例代码中的不一致。例如,有些在视图模型上实现了INotifyPropertyChanged,其他人在模型上实现了它。

如果在模型级别或视图模型级别处理属性更改,首选哪种方法?

2 个答案:

答案 0 :(得分:2)

如果要通过数据绑定更新视图中显示的项目,则视图模型中的处理(通知)属性更改似乎更自然。

首先拥有视图模型的原因之一是它保存模型中的数据,使视图很容易绑定到它。
因此,如果INotifyPropertyChange的主要原因是更新视图中绑定的项目,则应在viewmodel中更新它。

答案 1 :(得分:1)

我通常使用DependencyProperty代替INotifyPropertyChanged,但这个想法是一样的。

他们的目的是通知他们已经更改的视图控件,以便视图可以更新。这意味着视图与保存属性或对象的任何东西之间的连接很弱。在MVVM中,由于关注点分离,视图不应该与模型有任何链接。

我经常会通过为每个视图,视图模型和模型创建一个单独的项目来强制执行此操作。因此,您的问题的答案是INotifyPropertyChanged应该在viewmodel级别实现,因为视图永远不会触及模型级别的任何内容。话虽如此,MVVM只是一种编程范式,可以让程序员的工作变得更轻松,因此可能有理由以不同的方式实现它,如果这意味着让您的工作更轻松并且不会产生任何负面影响。