2013-10-07 2 views
12

Come può un DataTrigger modificare la visibilità di StackPanel, sulla base di una stringa rilegata? Ho il seguente XamlDataTrigger sulla stringa vuota

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

So che SearchText ottiene gli aggiornamenti e si lega correttamente al di fuori del StackPanel

Potrebbe qualcuno mi punto nella giusta direzione?

+0

Quando mi legano ad una proprietà 'TextBox'Text funziona. Sai cosa sta tornando la tua proprietà? – Tico

+0

La mia proprietà 'SearchText' è un' tipo STRING' – Giffesnaffen

+0

Sì, ma è di restituire qualsiasi valore o è vero il ritorno 'null' – Tico

risposta

20

Questo:

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

funzionerà per stringa vuota (""), tuttavia non funzionerà per null.

Aggiungi un'altra DataTrigger per il caso null:

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

È possibile combinare entrambi i trigger in un unico se si aggiunge quanto segue come parte dell'espressione vincolante 'TargetNullValue = ''' – Bryan

0

Strano come potrebbe sembrare, il codice qui sotto funziona per me:

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

Si può dire il valore vostra proprietà sta inviando?

+0

La mia stringa non è stata inizializzata con un valore nullo, Perciò sembrava non funzionare. – Giffesnaffen

+0

Sì, @HighCore era perfetto! – Tico

0

Prova questa

<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

corretta utilizzando String.Empty in XAML:

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

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