2013-10-14 98 views
5

在MVVM场景/节目堆叠面板,我想显示/隐藏基于一个超链接点击或点击图片的用户控件。这在XAML中如何实现?如何隐藏在WPF MVVM

+0

[数据绑定](http://msdn.microsoft.com/en-us/library/ms750612.aspx)的['能见度'](http://msdn.microsoft.com/en-us/library/system.windows.uielement.visibility(v = VS.95)的.aspx)使用'BoolToVisibiltyConverter' –

+1

没有财产上的VM布尔属性在我看来,需要在ViewModel上定义一个属性。请参阅我的答案,了解如何在XAML中执行此操作。 – Marc

+0

@马克,我看不出你的链接 – SNS

回答

4

绑定Visibility属性视图模型的一个布尔值属性,使用BooleanToVisibilityConverter

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

... 

<MyUserControl Visibility="{Binding IsMyUserControlVisible, Converter={StaticResource visibilityConverter}}" /> 

视图模型:

private bool _isMyUserControlVisible; 
public bool IsMyUserControlVisible 
{ 
    get { return _isMyUserControlVisible; } 
    set 
    { 
     _isMyUserControlVisible = value; 
     OnPropertyChanged("IsMyUserControlVisible"); 
    } 
} 
0

说你有你的视图模型,确定是否将一个布尔属性显示控制

public bool DisplayControl { get; set; } 
<StackPanel Visibility="{Binding DisplayControl, Converter={StaticResource visibilityConverter}}"/> 
+0

我没有提到'INotifyPropertyChanged',你就会有在'二传手使用DisplayProperty'以便每次数据更改时更新视图。 –

13

使用一个切换按钮,使用BooleanToVisibilityConverter绑定您UserControl的可见性:

定义的资源0使用BooleanToVisibiltyConverter

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

而且你的控件绑定您StackPanel的visibiilty :

<BooleanToVisibilityConverter x:Key="BoolToVisibility" /> 

的切换按钮:

<ToggleButton x:Name="VisibilityToggle> 
    <Image Source="..." /> 
</ToggleButton> 

用户控制:

<MyControl Visibility="{Binding IsChecked, ElementName=VisibilityToggle, Converter={StaticResource BoolToVisibility}}" /> 
+0

谢谢你。有效。我想用样式来改变切换按钮的外观。是否有可能 – SNS

+0

当然,你可以像任何其他控件一样设计ToggleButton。如果答案解决了这个问题,您可以接受并且提出所有其他帮助解决问题的答案...... – Marc