WPF: Binding Visibility by string contents WPF: Binding Visibility by string contents wpf wpf

WPF: Binding Visibility by string contents


You could use a ValueConverter:

<TextBlock      Visibility="{Binding InstanceName, Converter={local:StringNullOrEmptyToVisibilityConverter}}"      Text="{Binding InstanceName}"/>

with the following codebehind:

public class StringNullOrEmptyToVisibilityConverter : System.Windows.Markup.MarkupExtension, IValueConverter{    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)    {        return string.IsNullOrEmpty(value as string)             ? Visibility.Collapsed : Visibility.Visible;    }    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)    {        return null;    }    public override object ProvideValue(IServiceProvider serviceProvider)    {                    return this;    }}


If you are inside a (Data-)Template you can use Triggers for that.

Otherwise, the MVVM-Pattern or a ValueConverter will help you.


By putting an extra property in your viewmodel that you can bind the Visibility attribute to:

public class ViewModel{   public string InstanceName {...}   public Visibility InstanceVisibility    {       get       {           return String.IsNullOrEmpty(InstanceName) ? Visibility.Collapsed : Visibility.Visible;      }}