【问题标题】:Binding an empty string if value is non-null in wpf如果 wpf 中的值非空,则绑定一个空字符串
【发布时间】:2014-03-05 22:05:41
【问题描述】:
我想制作一个 WPF 用户控件,当且仅当 datacontext == null 时才显示字符串。当数据上下文为空时,我在绑定中使用 TargetNullValue 属性来显示自定义字符串,并且按预期工作。但是当 datacontext 不为空时,它只显示 ToString 值,我想去掉它。
当然,我可以通过使用 valueconverter 轻松解决这个问题,但我想找到一种仅使用 xaml 解决这个问题的方法。有人知道怎么做吗?
【问题讨论】:
标签:
c#
wpf
string
binding
【解决方案1】:
如果您希望 TextBlock 仅在绑定值为 null 的情况下显示,您可以设置触发器并在 绑定值为 null 时将 Visibility 设置为 Visible 否则Collapsed 总是。
<TextBlock Text="{Binding TargetNullValue=NullValue}">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding}" Value="{x:Null}">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
【解决方案2】:
在{x:Null} 上使用数据触发器。根据品味和需求,有许多使用样式、数据模板等的选项。例如:
<DataTemplate x:Key="ShowOnNull">
<TextBlock x:Name="text"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding}" Value="{x:Null}">
<Setter TargetName="text" Property="Text" Value="your custom string"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
...
<ContentPresenter ContentTemplate="{StaticResource ShowOnNull}"
Content="{Binding ...}"/>