如何从ViewModel更改WPF控件的可见性

Raj*_*Raj 10 wpf prism mvvm

我有一个WPF应用程序,试图实现MVVM模式和Prism 2.我有一个Usercontrol,它订阅了从另一个Usercontrol触发的事件.我想在订阅控件中切换少数子元素的可见性.事件被正确触发,即使我成功地将数据绑定到某些元素.如何使用ViewModel绑定Visibility或任何样式属性并动态更改它们.

Eze*_*dib 24

您可以在ViewModel中拥有一个布尔属性,并将该属性绑定到控件的Visibility属性.由于您将设置一个布尔值并且Visibility属性需要一个Visibility枚举值,因此您必须使用BooleanToVisibilityConverter转换器进行转换,

<Style.Resources>
     <BooleanToVisibilityConverter x:Key="booleanToVisibilityConverter" />
</Style.Resources>

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

希望这可以帮助.

Ezequiel Jadib


Dar*_*ren 10

虽然添加布尔属性并使用值转换器,但我建议将类型为Visibility的属性添加到ViewModel,例如

public Visibility ImageVisibility
{
    get { return shouldShowImage ? Visibility.Visible : Visibility.Collapsed }
}
Run Code Online (Sandbox Code Playgroud)

这种方法的优点是你不需要为你想要以可视方式表达的每个属性编写一个转换器(例如,当它低于10时,将标签变成红色的库存级别,你可以使用一个转换器一次或只是从您的VM公开StockLabelBrush属性)

  • 这是事实,但有几种方法可以解决这个问题.您可以处理来自`shouldShowImage`了`PropertyChanged`事件,提高一个新的`PropertyChanged`事件,或只允许通过提高这两个属性的事件包装属性访问`shouldShowImage`. (2认同)