【发布时间】:2009-12-04 05:57:25
【问题描述】:
猜我们有简单的模型,例如让它成为一个 Person { Name, Age }。
现在我们要显示人员列表。
- 人员是只读的
- 我们不需要编辑它们
- 我们不需要任何额外的东西,如演示属性等。
现在的问题是,不创建可能是模型类的副本或委托其所有属性的 PersonViewModel 类是否是一种好习惯?将列表框简单地绑定到人员列表而不是他们的视图模型是一个好主意吗?它看起来很干,但是 MVVM 的想法呢?
【问题讨论】:
猜我们有简单的模型,例如让它成为一个 Person { Name, Age }。
现在我们要显示人员列表。
现在的问题是,不创建可能是模型类的副本或委托其所有属性的 PersonViewModel 类是否是一种好习惯?将列表框简单地绑定到人员列表而不是他们的视图模型是一个好主意吗?它看起来很干,但是 MVVM 的想法呢?
【问题讨论】:
绕过虚拟机并直接在视图中使用 M 没有问题。有时模型太小而且是静态的,以至于将它们加载到包装 VM 中是一种浪费。
【讨论】:
我创建了独立的 ViewModel,但通常不是独立的模型。原因是 DataBinding——大多数 POCO 没有实现 INotifyPropertyChanged 接口,并且添加它们以使其成为伪模型似乎违背了重用简单类和尊重 MVVM 模式的目的。
现在,如果您知道自己永远不会编辑它们,那可能不是一个坏主意。具有简单属性重定向的 VM 对我来说似乎毫无意义。
【讨论】:
就我而言,如果你实现了 INotifyPropertyChanged,那么它就变成了一个 ViewModel,你可以绑定到它。 :) 当我写SoapBox Core 这都是 MVVM 时,我采取了一切都是 ViewModel 的方法。唯一的 Model 对象是来自第三方库的类,我引入并封装在自己的 ViewModel 中。
【讨论】:
当 ViewModel 不引入新的必需功能时,我不会为 Person 业务对象创建 ViewModel。
您可能对 MVVM 社区中的第二种方法感兴趣:为每个视图而不是每个业务对象创建一个 ViewModel。
可以在WPF Application Framework (WAF) 网站上找到遵循此方法的示例应用程序。
【讨论】: