2013-10-07 4 views
12

Comment un DataTrigger peut-il modifier la visibilité de la pile de panneaux en fonction d'une chaîne liée? Je donne les résultats suivants XamlDatatrigger sur une chaîne vide

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

Je sais que les mises à jour et SearchText obtient correctement se fixe à l'extérieur du StackPanel

Quelqu'un pourrait-il me diriger dans la bonne direction?

+0

Quand je lie à une propriété 'TextBox'Text cela fonctionne. Savez-vous ce que votre propriété est de retour? – Tico

+0

Ma propriété 'SearchText' est un type' String' – Giffesnaffen

+0

Oui, mais renvoie-t-elle une valeur ou renvoie-t-elle 'null' – Tico

Répondre

20

Ce:

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

va travailler pour une chaîne vide (""), mais il ne fonctionnera pas pour null.

Ajouter une autre DataTrigger pour le cas null:

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

Vous pouvez combiner les deux déclencheurs en un si vous ajoutez ce qui suit dans l'expression de liaison 'TargetNullValue = ''' – Bryan

0

étrange que cela puisse paraître, le code ci-dessous fonctionne pour moi:

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

Pouvez-vous dire la valeur de votre propriété envoie?

+0

La chaîne my n'a pas été initialisée avec une valeur null, par conséquent, il semble ne pas fonctionner. – Giffesnaffen

+0

Oui, @HighCore était sur place! – Tico

0

Essayez cette

<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

correcte à l'aide String.Empty en XAML:

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

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