Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to do a simple XAML (WPF) conditional binding on the Visibility property

Tags:

c#

wpf

xaml

I have got a view model with a property:

public class MyModel {     public bool IsEnabled {get;set;} } 

I want to use this property to toggle a button state. If the boolean is true I want to hide the button, and otherwise show it.

I tried things like:

<Button Visibility= "{Binding IsEnabled ? Hidden : Visible  }">Enable</Button> 

But this doesn't fit.

I tried some more complex solution but my guess is, I am missing something trivial.

Any suggestions?

like image 416
Stefan Avatar asked May 11 '15 16:05

Stefan


1 Answers

Since you want to toggle between Hidden and Visible and true is hidden you can either write custom IValueConverter or use simple Style.Trigger

<Button Content="Enable">     <Button.Style>         <Style TargetType="{x:Type Button}">             <Setter Property="Visibility" Value="Visible"/>             <Style.Triggers>                 <DataTrigger Binding="{Binding IsEnabled}" Value="True">                     <Setter Property="Visibility" Value="Hidden"/>                 </DataTrigger>             </Style.Triggers>                             </Style>     </Button.Style> </Button> 

This is all assuming the DataContext is set accordingly and MyModel.IsEnabled raises INotifyPropertyChanged.PropertyChanged event whenever changed

public class MyModel : INotifyPropertyChanged {     private bool _isEnabled;      public bool IsEnabled     {         get { return _isEnabled; }         set         {             _isEnabled = value;             OnPropertyChanged("IsEnabled");         }     }      #region INotifyPropertyChanged      public event PropertyChangedEventHandler PropertyChanged;      protected void OnPropertyChanged(string propertyName)     {         var handler = PropertyChanged;         if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));     }      #endregion } 
like image 126
dkozl Avatar answered Sep 20 '22 14:09

dkozl