56 votes

Quelle est la différence entre un déclencheur (Trigger) et un déclencheur de données (DataTrigger) ?

Ils semblent les mêmes. Y a-t-il une différence significative? Je pense que je manque quelque chose.

0 votes

Est-ce que cela répond à votre question ? Quels sont les différents déclencheurs en WPF?

58voto

Sean U Points 4476

Un Trigger normal ne répond qu'aux propriétés de dépendance.

Un DataTrigger peut être déclenché par n'importe quelle propriété .NET (en définissant sa propriété Binding). Cependant, ses setters ne peuvent toujours cibler que les propriétés de dépendance.

10 votes

Si c'est la seule différence, pourquoi utiliserait-on le déclencheur régulier ?

0 votes

Trigger est plus pratique à utiliser lors de la liaison à des propriétés dans la Vue.

2 votes

@SeanU pourquoi, qu'est-ce qui est plus pratique?

33voto

Will Points 76760

Une autre différence est qu'un DataTrigger peut être lié à un autre contrôle, une StaticResource, etc etc.

  <Style.Triggers>
    <DataTrigger 
      Binding="{Binding SomeProperty, 
                        ElementName=someOtherControl" 
      Value="Derp">
      <!-- etc -->
</code></pre>

<p>Vous ne pouvez examiner l'instance sur laquelle le style est appliqué lors de l'utilisation d'un <code>Trigger</code>. Par exemple, un <code>Trigger</code> appliqué à un Button peut inspecter la valeur de <code>IsPressed</code>, mais il ne pourrait pas inspecter la valeur (par exemple) de <code>Text</code> d'un <code>TextBox</code> sur le même formulaire si vous souhaitiez désactiver le <code>Button</code> si le <code>TextBox</code> était vide.</p></x-turndown>

19voto

RichardOD Points 19942

La réponse courte (comme je m'apprête à dormir) - Un déclencheur fonctionne sur les propriétés de dépendance (généralement des propriétés GUI) tandis que les déclencheurs de données peuvent être déclenchés par n'importe quelle propriété .NET (généralement une propriété dans un ViewModel qui implémente INotifyPropertyChanged).

1 votes

Avez-vous déjà réveillé? J'aimerais la réponse complète :)

0 votes

Pour résumer, si vous voulez déclencher une action à partir de la propriété de dépendance d'un élément d'interface utilisateur (par exemple, IsEnabled, IsChecked, etc. d'une case à cocher) qui se trouve dans votre Vue, alors vous devriez utiliser un déclencheur normal (aussi appelé PropertyTrigger). Si vous voulez déclencher une action à partir d'une propriété de votre Modèle de Vue, alors vous devriez utiliser un Déclencheur de Données (Data Trigger).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X