假设我们有一个视图,它有一个视图模型作为数据上下文。它绑定到一个名为 Visible 的属性。
房产应该是什么类型?
- 布尔值(对模型更友好,但强制使用转换器)?
- 可见性(更友好的视图) ?
假设我们有一个视图,它有一个视图模型作为数据上下文。它绑定到一个名为 Visible 的属性。
房产应该是什么类型?
将 bool 值保留在 ViewModel 中,并在 View 中使用BoolToVisibilityConverter。
原因:
ViewModel 应该是 View-agnostic 和 UI-Framework-agnostic。也就是说,您应该能够将您的 ViewModel 复制到控制台应用程序中并按 F5。
确保您利用MarkupExtension来简化转换器的使用
对于标题问题,一般来说:更接近视图。
举个例子:使用布尔值。
您的 VM 应该是 View 的逻辑模型。但它不应包含任何与 GUI 相关的类型(可见性)。
我认为视图模型是应用程序工作流的代表。一般来说,给定应用程序的每个视图都应该有一个视图模型——但这并不意味着视图模型应该以任何方式与特定视图耦合——我认为它是因为视图模型在某些情况下与理论视图相匹配点在应用程序的工作流程中。
视图模型绝对不应该暴露特定于 UI 的类型(即可见性、图像等)。保持您的视图模型 UI 不可知,并使用值转换器将一般类型转换为特定于 UI 的类型。
它不应该代表模型,除非模型恰好由您正在查看的视图紧密表示。
你应该选择布尔值。它也更灵活,即如果您想将此属性绑定到 Checkbox,您可以轻松地做到这一点,而无需更改任何 ViewModel 代码,并让您的 UI 人员更自由地决定如何在 UI 中绑定值。