MVVM:ViewModel是否格式化从模型中获取的数据?

时间:2010-10-06 09:54:21

标签: mvvm binding logic

我对MVVM感到有些困惑。

我理解这个概念并且可以看到优点。我的问题是:ViewModel是否直接从模型传递数据。

例如,假设我有一个带有findByName()方法的“User”模型。 ViewModel会调用它来传递 视图的相关用户详细信息。

模型可能会重新启动一组“用户”对象,每个对象都有名称,电子邮件地址等属性,也可能有方法。

我的问题是,ViewModel应该将一组User对象返回给视图,还是返回一个重构的版本 仅包含视图需要的内容?

据我了解,在这种情况下,“User”对象是模型层的一部分,在MVVM中,View应仅依赖于ViewModel。

我的问题是ViewModel中需要的大量看似冗余的绑定逻辑,用于重构输出。

将User对象集直接传递给View(通过ViewModel)会简单得多。

2 个答案:

答案 0 :(得分:1)

确实有一点冗余。但是,如果通过呈现对象来实现MVVM,则可以使用

  • 格式化视图的模型信息,而不会使用表示逻辑污染模型
  • 在发生任何变更时通知视图
  • 使用WPF的验证(如果您使用的是WPF)
  • 如果您想
  • ,则从VM级别而不是GUI运行验收测试
  • 将您的演示文稿从对模型的任何更改中抽象出来。

最后一个很重要。现在大多数情况下,演示文稿绑定都是动态的,并且无声地失败 - 网页,WPF,你可以命名它。这意味着,如果有人决定重命名模型上的某些内容,它会在您的GUI中突然中断,而您将不会知道

通过在模型和视图之间放置一个虚拟机,您可以自行缓冲此类更改。

如果您希望继续使用这些用户的工作,我会说它 - 它会帮助您获得有关GUI的快速反馈。但是,这些User对象第一次没有完全按照View所需的方式执行,或者您需要通知View的更改,或者您发现自己污染了模型,或者绑定中断了某些内容,也许这是一个很好的时机。转移到MVVM。

答案 1 :(得分:0)

这不是仅仅将休息时间移动到使用该模型的ViewModel吗?你仍然需要经历并更新所有这些。

如果我重命名了某些内容(例如将“姓氏”更改为“姓氏”),我希望事情能够破裂。我没有看到如何在VM层中添加绑定来修复它。