为什么在Model和ViewModel中都有INotifyPropertyChanged?

时间:2015-05-17 04:33:16

标签: c# wpf mvvm

我遇到的几乎每个MVVM示例都有Model和ViewModel实现INotifyPropertyChanged。

其他来源(专注于域建模的人)似乎暗示模型应该非常简单(与关注点分离有关?),基本上没有任何引用。不幸的是,这些消息来源不使用MVVM。

我试图调和两者。

- 我对编程比较陌生,对设计模式等全新,所以请尽量放轻松。

编辑:让我重新解释一下我的问题。鉴于以上的答案似乎是“有时一个,有时是另一个," WHEN 你应该做什么,什么时候应该做另一个。另外,每个如何实施?

(在另一篇文章中没有回答。只是让他们互相争论。)

2 个答案:

答案 0 :(得分:1)

模型必须实现INotifyPropertyChanged以通知视图模型它们已更改。如果模型没有实现INotifyPropertyChanged(或其他等效接口),那么使用轮询或其他类似效率低下的方法来阻止视图模型来检测模型状态的变化。

This MSDN page可能有助于进一步理解构成MVVM模式的各种组件的角色。

答案 1 :(得分:0)

我不知道这是否是最佳做法,但我设置了ViewModel,以便它是唯一的活动实体。只有通过从数据库读取(然后加载到ViewModel)或保存到数据库(从ViewModel中提取,修改仅对数据库有关的模型属性,如外键)创建模型时,才会直接更改模型。

如果出于某种原因,您希望能够将多个ViewModel连接到同一个模型,或者需要从ViewModel下更改模型,那么您有充分的理由来实现INotifyPropertyChanged在模型上。

我是一个相对业余爱好者,所以拿着我说的一粒盐。但这就是我一直在收集的内容,我认为强制执行这种分离使我的代码更清晰,更易于理解和调试。因此,对于我自己的项目,如果可以避免,我会尝试避免在我的模型上实现INotifyPropertyChanged