Silverlight Bind to inverse of boolean property value
silverlight, silverlight-3.0
Solution
This sort of question is asked so often and the answers so similar I thought its time to have a single answer to all (ok may "most") of the bool to value conversion questions. I've blogged it here.
The code is quite simple so I'll paste it here too:-
public class BoolToValueConverter<T> : IValueConverter
{
public T FalseValue { get; set; }
public T TrueValue { get; set; }
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null)
return FalseValue;
else
return (bool)value ? TrueValue : FalseValue;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value != null ? value.Equals(TrueValue) : false;
}
}
Now you can create converter to visibility with a one-liner:-
public class BoolToVisibilityConverter : BoolToValueConverter<Visibility> { }
Then for you can create an instance converter in a resource like this:-
<local:BoolToVisibilityConverter x:Key="InverseVisibility" TrueValue="Collapsed" FalseValue="Visible" />
Note the `TrueValue` and `FalseValue` are the swapped around from the more natural order giving you the inverted logic you wanted. With this in the `Resources` in your `UserControl` or even App.xaml you can now use it to bind to the `CanDownload` property to `TextBox` `Visibility` property:-
<TextBox Visibility="{Binding CanDownload, Converter={StaticResource InverseVisibility}}" />
Problem
I want to bind a controls visibility to inverse of boolean property value. I have a property CanDownload, if it is true then I want to hide textbox and vice versa. How can I achieve this? Thanks