【发布时间】:2011-01-08 12:43:06
【问题描述】:
好的,这是我的 XAML:
<TextBlock Text="{Binding Path=InstanceName}"></TextBlock>
如果InstanceName 为空或空字符串,我想要Visibility="Collapsed"。否则我想要Visibility="Visible"。我该怎么做?
【问题讨论】:
标签: wpf binding visibility textblock
好的,这是我的 XAML:
<TextBlock Text="{Binding Path=InstanceName}"></TextBlock>
如果InstanceName 为空或空字符串,我想要Visibility="Collapsed"。否则我想要Visibility="Visible"。我该怎么做?
【问题讨论】:
标签: wpf binding visibility textblock
您可以使用 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;
}
}
【讨论】:
如果您在 (Data-)Template 中,您可以为此使用 Triggers。
否则,MVVM-Pattern 或 ValueConverter 会为您提供帮助。
【讨论】:
通过在视图模型中添加一个额外的属性,您可以将 Visibility 属性绑定到:
public class ViewModel
{
public string InstanceName {...}
public Visibility InstanceVisibility
{
get
{
return String.IsNullOrEmpty(InstanceName) ? Visibility.Collapsed : Visibility.Visible;
}
}
【讨论】:
<TextBlock Text="{Binding Path=InstanceName},FallbackValue={x:Null}"></TextBlock>
然后添加一个 DataTrigger 以检查该值为 null 并使用 Setter 更改可见性。 这是我正在使用的简单方法。
【讨论】:
好的,所以这与 PyBinding 很接近:
<TextBlock Text="{Binding Path=InstanceName}" Visibility="{p:PyBinding BooleanToVisibility(IsNotNull($[.InstanceName]))}" ></TextBlock>
我需要用表示 IsNotNullOrEmpty 的东西替换 IsNotNull,但我越来越接近了。
【讨论】: