在WPF应用程序中,当您需要从ViewModel触发View元素的可见性时,基本上有两种方法:
bool
class ViewModel
{
public bool IsMyImageVisible { get; set; }
}
查看:
<Window.Resources>
<BooleanToVisibilityConverter x:Key="booleanToVisibility" />
</Window.Resources>
<Image Visibility="{Binding IsMyImageVisible, Converter={StaticResource booleanToVisibility}}" />
Visibility
class ViewModel
{
public Visibility MyImageVisibility { get; set; }
}
查看:
<Image Visibility="{Binding MyImageVisibility}" />
“方法2”仍然符合MVVM标准吗?
我什么时候应该使用“方法1”?
编辑:将问题更改为不太基于意见。
答案 0 :(得分:11)
第二个选项将ViewModel绑定到特定技术(WPF)。像某些Web框架这样的另一项技术将具有不同的Visibility枚举。您可能还需要将WPF引用添加到模型项目中,这对于某些场景可能不是一个好主意(因为该项目的所有使用者现在也必须包含该引用)。
如果您在ViewModel中不需要跨框架兼容性,那么您可以使用第二个,而没有任何其他缺点。
答案 1 :(得分:4)
考虑以下情况:
做出以下界面设计决定:它不会隐藏图像,而是像%鬼一样使它成为%10不透明。现在,如果你选择了第二个选项,则必须更改viewmodel代码,因为接口设计会发生变化。但是,如果您采用第一个选项,则修改界面(可能添加BoolToOpacity转换器)以反映该更改。第一个选择更符合MVVM理念。如果你有单独的人在处理界面设计和视图模型代码,那么他们就不必干涉彼此的工作。
答案 2 :(得分:2)
我认为这真的取决于你将如何处理该财产。您的应用程序的某些视图可能只是使图像可见/不可见,但在创建另一个视图时,您可能希望根据图像的可用性显示一个全新的模板。
在这种情况下,它会使Visibility属性有点奇怪。