flowbased

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>

Next post →  

Comments