假设我们有一个视图,它的数据上下文是一个视图模型。它绑定到一个名为Visible的属性。这个属性应该是什么类型?- 布尔值(更符合模型友好,但需要使用转换器)? - Visibility(更符合视图友好)?
在ViewModel中保留bool值,然后在View中使用BoolToVisibilityConverter。原因:ViewModel应该与View和UI框架无关。也就是说,您应该能够将ViewModel复制到控制台应用程序中并点击F5键运行。确保利用MarkupExtension简化转换器的用法。
我认为视图模型是应用程序工作流的代表。通常情况下,一个应用程序应该有一个与视图对应的视图模型——但这并不意味着视图模型在任何方式上都应该与特定视图耦合——我认为视图模型在应用程序工作流程中的某个点上与理论视图匹配。视图模型绝对不应该暴露UI特定类型(即可见性、图像等)。保持您的视图模型UI不可知,并使用值转换器将一般类型转换为UI特定类型。除非模型恰好被您正在查看的视图紧密表示,否则它不应该代表模型。
你应该选择Boolean。它更加灵活,例如,如果你想将此属性绑定到复选框上,你可以轻松地完成这个过程,而不需要更改任何ViewModel代码,并且能够给你的UI设计人员更多的自由来决定如何在UI中绑定值。