视图模型是否应该更接近视图或模型?

时间:2013-08-12 18:35:59

标签: c# .net design-patterns mvvm architecture

假设我们有一个视图模型作为数据上下文。它绑定到名为Visible的属性。

该物业应该是什么类型的?

  • 布尔值(模型更友好,但强制使用转换器)?
  • 可见性(更多视图友好)?

4 个答案:

答案 0 :(得分:4)

将bool值保留在ViewModel中,并在视图中使用BoolToVisibilityConverter

原因:

ViewModel应该是与视图无关的,并且与UI-Framework无关。也就是说,您应该能够将ViewModel复制到控制台应用程序中并点击F5。

确保您利用MarkupExtension来简化转换器使用

答案 1 :(得分:4)

对于标题问题,一般来说:更接近视图。

示例:使用布尔值。

您的VM应该是View的逻辑模型。但它不应包含任何GUI相关类型(可见性)。

答案 2 :(得分:3)

我认为视图模型是应用程序工作流的代表。通常,给定的应用程序应该在每个视图中都有一个视图模型 - 但这并不意味着视图模型应该以任何方式与特定视图耦合 - 我认为它是视图模型与某些视图模型的理论视图相匹配指出应用程序的工作流程。

视图模型应该绝对不公开特定于UI的类型(即可见性,图像等)。保持您的视图模型UI不可知并使用值转换器将常规类型转换为UI特定类型。

它不应该代表模型,除非模型碰巧由您正在查看的视图密切表示。

答案 3 :(得分:2)

你应该去布尔。它也更灵活,即如果你想将这个属性绑定到Checkbox,你可以轻松地做到这一点,而无需更改任何ViewModel代码,并让你的UI人更自由地决定如何在UI中绑定值。