Można użyć ValueConverter:
<TextBlock
Visibility="{Binding InstanceName, Converter={local:StringNullOrEmptyToVisibilityConverter}}"
Text="{Binding InstanceName}"/>
z następującym kodzie:
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;
}
}
Widzę, że działa, ale to będzie bardzo nudne. Nie mogę przestać myśleć, że musi być lepszy sposób. –
Jak myślisz, co byłoby nużącą częścią? Czy uważasz, że ustawienie zarówno widoczności, jak i tekstu może stać się nudne? czy tak myślisz ogólnie o przetwornikach wartości? Jedną z rzeczy, którą zmienię, jest powiązanie właściwości visibility z relatywnym źródłem z self = path name, aby nie powtarzać "InstanceName"! poza tym nie widzę, jak to może być nudne (zawsze można napisać własne MarkupExtensions lub nawet zachowanie, które może to zrobić, ale myślę, że to jest na topie, a wartością jest tylko właściwa rzecz) –