【问题标题】:Datatrigger on empty string空字符串上的数据触发器
【发布时间】:2013-10-07 22:48:30
【问题描述】:

DataTrigger 如何根据绑定的字符串更改堆栈面板的可见性? 我有以下 Xaml

<StackPanel HorizontalAlignment="Right" 
            Orientation="Horizontal" 
            Grid.Column="1"
            Background="#FF7a7a7a">
    <StackPanel.Style>
        <Style TargetType="{x:Type StackPanel}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding SearchText}" Value="">
                    <Setter Property="Visibility" Value="Hidden"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </StackPanel.Style>
    Content....
   </StackPanel>

我知道SearchText 在StackPanel 之外得到更新和正确绑定

有人能给我指出正确的方向吗?

【问题讨论】:

  • 当我绑定到 TextBoxText 属性时,它可以工作。你知道你的财产要返还什么吗?
  • 我的SearchText 属性是String 类型
  • 是的,但它是返回任何值还是返回null

标签: c# wpf data-binding


【解决方案1】:

这个:

<DataTrigger Binding="{Binding SearchText}" Value="">
   <Setter Property="Visibility" Value="Hidden"/>
</DataTrigger>

适用于空字符串 (""),但不适用于 null。

为 null 情况添加另一个 DataTrigger:

<DataTrigger Binding="{Binding SearchText}" Value="{x:Null}">
   <Setter Property="Visibility" Value="Hidden"/>
</DataTrigger>

【讨论】:

  • 如果将以下内容添加为绑定表达式TargetNullValue='',则可以将两个触发器合并为一个
【解决方案2】:

在 XAML 中正确使用 String.Empty:

xmlns:sys="clr-namespace:System;assembly=mscorlib"
...
<DataTrigger Binding="{Binding SearchText}" Value="{x:Static sys:String.Empty}">

【讨论】:

    【解决方案3】:

    听起来很奇怪,下面的代码对我有用:

    <StackPanel Background="#FF7a7a7a">
        <StackPanel.Style>
            <Style TargetType="{x:Type StackPanel}">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Text, ElementName=textBlock}" Value="">
                        <Setter Property="Visibility" Value="Hidden"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </StackPanel.Style>
        <TextBox x:Name="textBlock" Text="" Width="100" Height="30"></TextBox>
    </StackPanel> 
    

    您能说出您的财产发送的价值吗?

    【讨论】:

    • 我的字符串没有初始化为null,因此它似乎不起作用。
    • 是的,@HighCore 出现了!
    【解决方案4】:

    试试这个

    <StackPanel.Style>
                                            <Style TargetType="StackPanel">
                                                <Setter Property="Visibility" Value="Collapsed"/>
                                                <Style.Triggers>
                                                    <DataTrigger Binding="{Binding YourBoundPropertyName}" Value="True">
                                                        <Setter Property="Visibility" Value="Visible"/>
    
                                                    </DataTrigger>
                                                </Style.Triggers>
                                            </Style>
                                        </StackPanel.Style>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      • 2011-10-21
      • 1970-01-01
      • 1970-01-01
      • 2016-02-10
      • 2017-11-06
      • 1970-01-01
      相关资源
      最近更新 更多