2010-09-22 30 views
0

J'ai une configuration DataTrigger comme ceci:Spécification du contexte de données en XAML arrête le déclenchement de données de travail

<UserControl.Resources> 
    <Style x:Key="resultTypeStyle"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding Result, Path=Result.Type}" Value="Confirmation"> 
       <Setter Property="Control.Visibility" Value="Collapsed" /> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</UserControl.Resources> 

Et deux contrôles qui l'utilisent:

<TextBlock Style="{StaticResource resultTypeStyle}" FontSize="14" Grid.Row="2">Condition</TextBlock> 
    <myns:ConditionBuilderView Style="{StaticResource resultTypeStyle}" DataContext="{Binding Condition}" Grid.Row="3"/> 

Le type de résultat est modifié par une zone de liste déroulante.

Lorsque le type de résultat est la confirmation alors le TextBox disparaît mais le ConditionBuilderView reste visible à moins je supprimer l'attribut DataContext de celui-ci.

Je dois définir l'attribut DataContext afin que le contrôle obtienne les bonnes données. Qu'est-ce que la définition du contexte de données signifie que la propriété de visibilité ne fonctionne plus?

+0

Est-ce que la Condition que vous liez le DataContext pour implémenter le résultat auquel vous liez le Trigger? Pour le demander autrement, le DataContext du TextBlock est-il le même que le DataContext du ConditionBuilderView? –

+1

Je vois. Cela a du sens maintenant. Étant donné que j'ai défini le contexte de données dans ConditionBuilderView, le déclencheur examine ce contexte et non le contexte du contrôle parent dont hérite la zone de texte. –

+0

Exactement. Bonne réponse, @MDDosu. –

Répondre

2

Vous modifiez en fait le contexte utilisé pour la liaison dans le style de ConditionBuilderView. Votre DataTrigger recherche donc Result.Path sur la condition liée. Si c'est à peu près la visibilité cela devrait fonctionner:

<TextBlock Style="{StaticResource resultTypeStyle}" FontSize="14" Grid.Row="2">Condition</TextBlock> 
<ContentControl Grid.Row="3" Style="{StaticResource resultTypeStyle}" > 
    <myns:ConditionBuilderView DataContext="{Binding Condition}"/> 
</ContentControl> 
+0

Merci MrDosu, c'est très instructif! –