2010-02-13 8 views
1

Dans une application WPF, j'ai correctement lié DataTemplate à un nœud XML qui ressemble à:Databinding XML dans un DataTrigger dans WPF

<answer answer="Tree", correct="false" score="10" /> 

Dans ma demande, j'ai un TextBlock avec la réponse en elle . Au début, je le veux invisible, mais quand l'attribut correct dans le fichier XML devient "vrai", il doit devenir visible.

Mon DataTemplate est connecté correctement, car tout le reste fonctionne. Par exemple, si je change l'attribut de réponse dans le fichier XML (juste pour tester), il change dans ma vue WPF. Mais j'ai des problèmes avec la visibilité. Ceci est mon XAML:

<TextBlock Text="{Binding [email protected]}" Visibility="Hidden"> 
    <TextBlock.Style> 
     <Style> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding [email protected]}" Value="true"> 
        <Setter Property="TextBlock.Visibility" Value="Visible" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TextBlock.Style> 
</TextBlock> 

Je devine que la liaison de données dans le DataTrigger ne fonctionne pas correctement. Quelqu'un a une idée?

Répondre

2

J'ai rencontré le même problème avec les ToggleButtons de la base de données. Essayez de supprimer Visibility = "False" et remplacez-le par un autre DataTrigger qui gère le cas incorrect.

1

Je pense que le problème est que la propriété Visibility est codée en dur. Essayez de définir la visibilité dans le style:

<TextBlock Text="{Binding [email protected]}"> 
    <TextBlock.Style> 
     <Style TargetType="{x:Type TextBlock}"> 
      <Setter Property="Visibility" Value="Hidden"/> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding [email protected]}" Value="true"> 
        <Setter Property="TextBlock.Visibility" Value="Visible" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TextBlock.Style> 
</TextBlock> 
+0

Que faire si la réponse est modifiée et est incorrecte à nouveau? Je ne sais pas pourquoi un utilisateur ferait cela, mais c'est encore quelque chose à considérer. – Dave

+0

@Dave, vous faites un bon point. Ma réponse est juste en réponse à sa question particulière et à l'échantillon de code. – Tim

1

Bien sûr, cela fonctionne si vous donnez un cas spécifique plutôt que faux. Comme dans mon cas, c'était {x: Null} et value. Donc, quand sa valeur à bind est présente, elle sera vraie et TextBlock.Visibilty sera définie en utilisant la valeur de setters et quand le chemin de liaison n'a aucune valeur à l'intérieur, ie null dans mon cas, c'est simplement {x: Null} :) Est-ce qu'il ne le voudrait pas comme un déclencheur de données à la place?