Se puede usar un ValueConverter:
<TextBlock
Visibility="{Binding InstanceName, Converter={local:StringNullOrEmptyToVisibilityConverter}}"
Text="{Binding InstanceName}"/>
con el siguiente código subyacente:
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;
}
}
Puedo ver que funciona, pero eso se volverá realmente tedioso rápidamente. No puedo evitar pensar que debe haber una mejor manera. –
¿cuál crees que sería la parte tediosa? ¿Crees que configurar la visibilidad y el texto por separado podría ser tedioso? o lo piensas así de valueconverters en general? ¡Una cosa que cambiaría es vincular la propiedad de visibilidad con el origen de la familia a self con path = Name para que no repita "InstanceName"! aparte de eso no veo cómo esto podría volverse tedioso (siempre se podría escribir su propio MarkupExtensions o incluso un Comportamiento que podría hacer esto, pero yo pensaría que es exagerado y un valueconverter sería solo el cosa correcta) –