WPF:通过字符串内容绑定可见性

Jon*_*len 16 wpf binding visibility textblock

好的,这是我的XAML:

<TextBlock Text="{Binding Path=InstanceName}"></TextBlock>
Run Code Online (Sandbox Code Playgroud)

如果InstanceName是null或空字符串,我想要Visibility="Collapsed".否则我想要Visibility="Visible".我该怎么办?

Mar*_*ter 44

您可以使用ValueConverter:

<TextBlock 
     Visibility="{Binding InstanceName, Converter={local:StringNullOrEmptyToVisibilityConverter}}" 
     Text="{Binding InstanceName}"/>
Run Code Online (Sandbox Code Playgroud)

使用以下代码隐藏:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 您认为这是多余的部分?你认为单独设置可见性和文本可能会变得单调乏味吗?或者你认为一般的价值转换者呢?我要改变的一件事是使用path = Name将visibility属性与relativesource绑定到self,这样就不会重复"InstanceName"了!除此之外,我不知道这会如何变得乏味(你总是可以编写自己的MarkupExtensions甚至是一个可以做到这一点的行为,但我认为它超过了顶部而且一个价值转换器才是正确的事情) (6认同)