在MVVM中,一个View是否应该间接绑定到Model中的属性?

14
假设我有一个视图(View),它的DataContext绑定到一个ViewModel,而且ViewModel公开了一个Model属性。
  • 在MVVM中,将View中的字段绑定到Model中的属性(例如Binding Path=Model.FirstName)是典型的做法吗?
  • Model是否应该实现INotifyPropertyChanged接口?
我的团队正在使用Prism和WPF中的MVVM。很多Prism的示例都是间接地绑定到Model上的。我个人对这种方法表示怀疑,我认为Model中的内容应该公开行为(不仅局限于属性级别),并且重要事件应该通过event进行通信,客户端可以订阅或不订阅。
我认为,将领域/模型对象实现INotifyPropertyChanged会向世界表明它具有UI/UX意识,在ViewModel中也会出现冗余。
你认为呢?哪种方式适合你?是清晰区分View/ViewModel/Model还是像Prism示例中一样采用混合方式?

考虑到你无法绑定到字段,不行。属性是另一回事... - user1228
1个回答

24

我看到很多人在它们的Model中直接实现INotifyPropertyChanged,同样地,我也看到有些人在ViewModel中实现。

我更喜欢并且这样做(实现INotifyPropertyChanged)在ViewModel中。我同意,这有时会在ViewModel中创建冗余,但我更喜欢明确区分/分离ViewModelModel以及它们的目的应该是什么。对我来说,Model只是一个字面上的Model。它只是我的业务数据的表示,没有更多的东西。对我来说,它不应该通过通知属性更改事件导致View发生任何变化。View应该与ViewModel交互,而ViewModel应该使用Model。我不喜欢视图直接影响Model。我不喜欢使用Model.FirstName,因为对我来说,这似乎违背了MMVM,告诉View模型中有什么。


2
如果我有10个不同的模型实例,每个实例都有20个属性,那么在ViewModel中显式地公开所有这些属性不是很麻烦吗? - Joe Slater
1
@AnkurSharma 我同意,虽然会有痛苦,但像我这样的人喜欢这种方式。我在答案中解释了我的理由。 - Haris Hasan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接