ViewModel中可见性类型的属性

Ben*_*hon 4 c# wpf xaml mvvm

在WPF应用程序中,当您需要从ViewModel触发View元素的可见性时,基本上有两种方法:

方法1:使用a bool

class ViewModel
{
    public bool IsMyImageVisible { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

视图:

<Window.Resources>
    <BooleanToVisibilityConverter x:Key="booleanToVisibility" />
</Window.Resources>

<Image Visibility="{Binding IsMyImageVisible, Converter={StaticResource booleanToVisibility}}" />
Run Code Online (Sandbox Code Playgroud)

方法2:使用a Visibility

class ViewModel
{
    public Visibility MyImageVisibility { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

视图:

<Image Visibility="{Binding MyImageVisibility}" />
Run Code Online (Sandbox Code Playgroud)

问题

  1. "方法2"仍然符合MVVM标准吗?

  2. 我什么时候应该使用"方法1"?

编辑:改变问题,以减少意见为基础.

Kna*_*ģis 11

第二个选项将ViewModel绑定到特定技术(WPF).像某些Web框架这样的另一项技术将具有不同的Visibility枚举.您还可能需要将WPF引用添加到模型项目中,这对某些方案可能不是一个好主意(因为该项目的所有使用者现在也必须包含该引用).

如果您不需要ViewModel中的跨框架兼容性,那么您可以使用第二个,而没有任何其他缺点.

  • 错误.ICommand或Dispatcher是Windows命名空间的类,与WPF无关. (2认同)