如何在 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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-13 09:50:46  来源:igfitidea点击:

How to hide/show Stack panel in wpf mvvm

wpfxamlmvvm

提问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}}"/>