【问题标题】: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 解决这个问题的方法。有人知道怎么做吗?

【问题讨论】:

  • 当value不为null时,你想显示什么?
  • @Rohit:在那种情况下,我什么都不显示

标签: 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 ...}"/>
    

    【讨论】:

      猜你喜欢
      • 2013-03-12
      • 2021-12-03
      • 2018-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-12
      相关资源
      最近更新 更多