Caliburn.Micro - 包裹模型或直接暴露它?

时间:2017-01-16 11:23:40

标签: wpf mvvm caliburn.micro

我目前正面临MVVM中讨论最多的问题之一:我的WPF应用程序中有一个复杂的模型,我不确定如何将其数据显示给View。

根据StackOverflow和this article的许多答案,有两种方法:

  1. 通过在ViewModel中为Model中的每个属性添加一个属性来将Model包装在ViewModel中

  2. 将模型直接暴露给视图而不复制属性。

  3. 到目前为止我所理解的是,从理论的角度来看,第一种方法更好,而第二种方法是应该避免的快速捷径。

    在我之前链接的same article中,作者写了以下内容:

      

    在审查Caliburn框架中的示例应用程序时,他们使用选项2实现VM。

    我看了一下Caliburn.Micro文档,遗憾的是它只使用了一个没有真实模型的简单ViewModel,所以我不知道如何验证这个语句。

    作者是对的吗?因为我使用Caliburn.Micro我应该使用第二种方法而不是第一种方法,以便更加“符合”框架实现?

2 个答案:

答案 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)

通常最好公开视图模型,因为这允许您添加其他属性来控制数据的显示方式(例如格式化或连接数据)。但是,如果您不需要,直接公开模型类没有任何问题。