2013-10-07 15 views
12

Wie kann ein DataTrigger die Sichtbarkeit von Stackpanel basierend auf einer binded-Zeichenfolge ändern? Ich habe folgende XAMLDatentrigger bei leerer Zeichenfolge

<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> 

Ich weiß, dass SearchText Updates bekommt und bindet richtig außerhalb der StackPanel

Könnte jemand mich in die richtige Richtung? Diese

+0

Wenn ich zu einer 'TextBox'Text Eigenschaft binden funktioniert es. Weißt du, was deine Immobilie zurückgibt? – Tico

+0

Meine 'SearchText' -Eigenschaft ist ein 'String'-Typ – Giffesnaffen

+0

Ja, aber gibt es irgendeinen Wert zurück oder gibt es' null 'zurück – Tico

Antwort

20

:

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

für leere Zeichenkette arbeiten (""), aber es wird nicht für null arbeiten.

andere DataTrigger für den Null-Fall hinzufügen:

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

Sie können beide Trigger zu einem kombinieren, wenn Sie folgendes als Teil des Bindungsausdrucks hinzufügen: 'TargetNullValue = '' – Bryan

0

Seltsam wie es klingen mag, funktioniert der Code unten für mich:

<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> 

Können Sie den Wert erklären Sie Ihr Eigentum zu senden ist?

+0

Die my-Zeichenfolge wurde nicht initialisiert und hatte den Wert null, daher schien sie nicht zu funktionieren. – Giffesnaffen

+0

Ja, @HighCore war genau richtig! – Tico

0

diesen

<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> 
2

Korrekte Verwendung String.Empty in XAML Versuchen:

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

http://stackoverflow.com/q/2577687 –

Verwandte Themen