WPF: Bind Multiple Visibility Values to a Control
If you want to bind multiple Visibility values to a control in WPF you can do it by using a MultiBinding and a converter, for example on a TextBox:
<TextBox>
<TextBox.Visibility>
<MultiBinding Converter="{StaticResource MultiVisibilityConverter}">
<Binding Path="VisibilityValue1">
<Binding Path="VisibilityValue2">
</TextBox.Visibility>
</TextBox>
You just need to implement the MultiVisibilityConverter like this:
public class MultiVisibilityConverter: IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
// Collapse if one of the values says so
if (values.Contains(Visibility.Collapsed))
{
return Visibility.Collapsed;
}
return Visibility.Visible;
/* Alternative: Collapse if all of the values say so
if (values.Contains(Visibility.Visible))
{
return Visibility.Visible;
}
return Visibility.Collapsed;
*/
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
And declare it in the resources of the UserControl or Window:
<Window.Resources>
<util:MultiVisibilityConverter x:Key="MultiVisibilityConverter">
</Window.Resources>