Datatrigger на пустой строке

Как 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

Может ли кто-нибудь указать мне в правильном направлении?

Ответы

Ответ 1

Эта:

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

будет работать для пустой строки (""), однако она не будет работать для null.

Добавьте еще один DataTrigger для нулевого случая:

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

Ответ 2

Исправить с помощью String.Empty в XAML:

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> 

Можете ли вы рассказать о ценности, которую посылает ваша собственность?

Ответ 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>