Reputation: 405
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?
Upvotes: 10
Views: 19886
Reputation: 13184
Use a toggle button and bind the visibility of your UserControl
using a 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}}" />
Upvotes: 19
Reputation: 6547
Say you have a boolean property in your ViewModel that determines whether or not to show the control
public bool DisplayControl { get; set; }
Bind the visibiilty of your StackPanel
using a BooleanToVisibiltyConverter
<Window.Resources>
<BooleanToVisibilityConverter x:Key="visibilityConverter" />
</Window.Resources>
And your control:
<StackPanel Visibility="{Binding DisplayControl, Converter={StaticResource visibilityConverter}}"/>
Upvotes: 1
Reputation: 292405
Bind the Visibility
property to a bool property of the ViewModel, using a 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");
}
}
Upvotes: 6