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; }}