如何在 wpf mvvm 中隐藏/显示堆栈面板
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/19357142/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to hide/show Stack panel in wpf mvvm
提问by SNS
In a MVVM scenario, I want to show/hide a user control based on a hyper link click or image click. How can this be achieved in XAML?
在 MVVM 场景中,我想显示/隐藏基于超链接点击或图像点击的用户控件。这如何在 XAML 中实现?
回答by Marc
Use a toggle button and bind the visibility of your UserControlusing a BooleanToVisibilityConverter:
使用一个开关按钮和绑定你的知名度UserControl使用BooleanToVisibilityConverter:
Define a resource:
定义一个资源:
<BooleanToVisibilityConverter x:Key="BoolToVisibility" />
The toggle button:
切换按钮:
<ToggleButton x:Name="VisibilityToggle>
<Image Source="..." />
</ToggleButton>
The user control:
用户控制:
<MyControl Visibility="{Binding IsChecked, ElementName=VisibilityToggle, Converter={StaticResource BoolToVisibility}}" />
回答by Thomas Levesque
Bind the Visibilityproperty to a bool property of the ViewModel, using a BooleanToVisibilityConverter
将该Visibility属性绑定到 ViewModel 的 bool 属性,使用BooleanToVisibilityConverter
<Window.Resources>
<BooleanToVisibilityConverter x:Key="visibilityConverter" />
</Window.Resources>
...
<MyUserControl Visibility="{Binding IsMyUserControlVisible, Converter={StaticResource visibilityConverter}}" />
ViewModel:
视图模型:
private bool _isMyUserControlVisible;
public bool IsMyUserControlVisible
{
get { return _isMyUserControlVisible; }
set
{
_isMyUserControlVisible = value;
OnPropertyChanged("IsMyUserControlVisible");
}
}
回答by Omri Btian
Say you have a boolean property in your ViewModel that determines whether or not to show the control
假设您的 ViewModel 中有一个布尔属性,用于确定是否显示控件
public bool DisplayControl { get; set; }
Bind the visibiilty of your StackPanelusing a BooleanToVisibiltyConverter
StackPanel使用 a绑定您的可见性BooleanToVisibiltyConverter
<Window.Resources>
<BooleanToVisibilityConverter x:Key="visibilityConverter" />
</Window.Resources>
And your control:
而你的控制:
<StackPanel Visibility="{Binding DisplayControl, Converter={StaticResource visibilityConverter}}"/>

