17

好的,这是我的 XAML:

<TextBlock Text="{Binding Path=InstanceName}"></TextBlock>

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

4

5 回答 5

48

您可以使用 ValueConverter:

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

使用以下代码隐藏:

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;
    }
}
于 2010-01-23T17:00:59.380 回答
3

如果您在(数据-)模板中,则可以为此使用触发器

否则,MVVM 模式ValueConverter将为您提供帮助。

于 2010-01-23T10:14:23.770 回答
2

通过在您的视图模型中放置一个额外的属性,您可以将 Visibility 属性绑定到:

public class ViewModel
{
   public string InstanceName {...}
   public Visibility InstanceVisibility 
   { 
      get 
      {
           return String.IsNullOrEmpty(InstanceName) ? Visibility.Collapsed : Visibility.Visible;
      }
}
于 2010-01-23T10:13:56.517 回答
1
<TextBlock Text="{Binding Path=InstanceName},FallbackValue={x:Null}"></TextBlock>

然后添加一个 DataTrigger 以检查该值为 null 并使用 Setter 更改可见性。这是我正在使用的简单方法。

于 2010-01-23T10:40:22.803 回答
0

好的,所以这与 PyBinding 很接近:

<TextBlock Text="{Binding Path=InstanceName}" Visibility="{p:PyBinding BooleanToVisibility(IsNotNull($[.InstanceName]))}"  ></TextBlock>

我需要用意味着 IsNotNullOrEmpty 的东西替换 IsNotNull,但我越来越接近了。

于 2010-01-25T01:46:08.153 回答