我目前正面临MVVM中讨论最多的问题之一:我的WPF应用程序中有一个复杂的模型,我不确定如何将其数据显示给View。
根据StackOverflow和this article的许多答案,有两种方法:
通过在ViewModel中为Model中的每个属性添加一个属性来将Model包装在ViewModel中
将模型直接暴露给视图而不复制属性。
到目前为止我所理解的是,从理论的角度来看,第一种方法更好,而第二种方法是应该避免的快速捷径。
在我之前链接的same article中,作者写了以下内容:
在审查Caliburn框架中的示例应用程序时,他们使用选项2实现VM。
我看了一下Caliburn.Micro文档,遗憾的是它只使用了一个没有真实模型的简单ViewModel,所以我不知道如何验证这个语句。
作者是对的吗?因为我使用Caliburn.Micro我应该使用第二种方法而不是第一种方法,以便更加“符合”框架实现?
答案 0 :(得分:4)
由于我正在使用Caliburn.Micro,我应该使用第二种方法而不是第一种方法,以便更加“符合”框架实现吗?
没有。 Caliburn.Micro只是一个MVVM库。 如何实现实际的MVVM模式完全取决于您。
我同意@Marek Dzikiewicz你应该将模型包装在一个视图模型类中,该类可以实现INotifyPropertyChanged接口并提供任何其他UI特定功能。此代码不属于业务对象。您可以在此处参考我的答案以获取更多信息:
Reuse the same models in ASP.NET MVC and WPF MVVM
显然,如果模型类确实是一个未在任何其他应用程序中使用的UI特定类,并且不包含服务器端使用的任何业务逻辑,则可以修改此类并直接绑定到该类。但毕竟它是一种(子)视图模型。
答案 1 :(得分:3)
通常最好公开视图模型,因为这允许您添加其他属性来控制数据的显示方式(例如格式化或连接数据)。但是,如果您不需要,直接公开模型类没有任何问题。