Caliburn.Micro - 包装模型还是直接公开?

Caliburn.Micro - Wrap Model or expose it directly?

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

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

  1. 通过在 ViewModel 中为 Model

  2. 中的每个 属性 添加一个 属性 将 Model 包装在 ViewModel 中
  3. 将模型直接暴露给视图而不复制属性。

目前我的理解是,从理论上讲,第一种方法更好,而第二种方法是应该避免的捷径。

在我之前链接的same article中,作者是这样写的:

In reviewing the sample application from the Caliburn framework, they implement the VM using option 2.

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

作者说的对吗?由于我使用的是 Caliburn.Micro 我应该使用第二种方法而不是第一种方法以便更好地 "compliant" 框架实现吗?

通常最好公开视图模型,因为这样可以添加额外的属性来控制数据的显示方式(例如格式化或连接数据)。但是,如果您不需要它,直接公开模型 类 没有错。

Since I'm using Caliburn.Micro should I use the second approach instead of the first one in order to be more "compliant" with the framework implementation?

没有。 Caliburn.Micro 只是一个 MVVM 库。 如何实现实际的 MVVM 模式完全取决于您。

我同意@Marek Dzikiewicz 的观点,您应该将模型包装在视图模型中 class,它可以实现 INotifyPropertyChanged 接口并提供任何其他 UI 特定功能。此代码不属于业务对象。您可以在这里参考我的回答以获取更多信息:

显然,如果模型 class 确实是 UI 特定的 class,未在任何其他应用程序中使用,并且不包含在服务器上使用的任何业务逻辑侧,你可以修改这个 class 并直接绑定到它。但毕竟它是一种(子)视图模型。