Sollte ich WPF Konverter oder Trigger verwenden?

8

Ich habe mich gefragt, wie Sie entscheiden, wann converters und wann triggers verwendet werden soll. Ich bevorzuge die Verwendung von Triggern für Operationen auf der GUI (wie Anzeigen / Verbergen von Steuerelementen, Ändern ihrer Darstellung usw.).

Vor einiger Zeit habe ich ein BooleanToVisibilityConverter für diesen Zweck benutzt, aber jetzt brauche ich es einfach nicht mehr, ich mache alle Dinge, die mit visibility verbunden sind, mit Triggern und ich habe sogar angefangen zu denken " was war der Zweck, ein BooleanToVisibilityConverter vom MS-Team zu erstellen? ". Wenn es möglich ist, versuche ich generell, den Code - in diesem Beispiel - XAML auf deklarative Weise zu schreiben.

Was halten Sie davon?

    
Piotr Ptak 22.06.2012, 08:01
quelle

5 Antworten

13

Ich stimme Ihnen zu, ich versuche auch, deklarativen Code in XAML zu verwenden und Triggers anstelle von Converters zu bevorzugen.

In den meisten Szenarien können Trigger die gleiche Arbeit verrichten wie jeder andere Konverter, aber Converters kann benutzerdefinierte / Geschäftslogik haben, da pchajer erwähnt wird.

Eine Einschränkung von Triggers ist, dass Setter in Ihrem DataTriggers nur die Eigenschaften Ihrer UI-Elemente ändern können ; also Sie können Ihre ViewModels-Eigenschaft nicht mit Triggern aktualisieren, das heißt Converters win, erinnern Sie sich an die Methode ConvertBack .

Sie können also Ihre VM-Eigenschaft mit einem Steuerelement Visibility mit BooleanToVisibilityConverter binden, und selbst wenn Ihre Steuerelemente visibility auf andere Weise geändert wird, wird Ihre VM-Eigenschaft aktualisiert. ; Im Allgemeinen ist es nicht erforderlich, dass BooleanToVisibilityConverter durch Trigger ersetzt wird.

Also kurz -

  

Triggers kann nur OneWay Operationen ausführen, während Converters TwoWay Operationen ausführen kann

    
akjoshi 22.06.2012, 12:30
quelle
2

Meiner Meinung nach schauen Sie von unten nach oben und Sie müssen nur von oben nach unten schauen.

Trigger - Wenn eine angegebene Bedingung erfüllt ist, löst sie eine Ausführung aus

Konverter -Konvertiert zwischen zwei inkompatiblen Typen.

Warum brauchen wir einen booleschen Datentyp, wenn wir die gleiche Funktionalität mit intergers machen können?

    
Jimmy 22.06.2012 14:41
quelle
1

Zusätzlich zu dem, was oben gesagt wurde, kann ich nur hinzufügen:

  • Trigger erfordern manchmal, Dinge zu duplizieren, z. Wenn Sie mehr als eine Eigenschaft für Trigger haben, müssen Sie jede Kombination angeben
  • Manchmal werden Sie Code benötigen, um richtig von A nach B zu konvertieren, dann müssen Sie Konverter verwenden. Trigger sind gut, wenn der Wert / die Eigenschaft bereits in der VM verfügbar ist und Sie ihn für Trigger verwenden können.
Martin Moser 22.06.2012 12:37
quelle
1

Sie können die Funktionalität entweder durch Trigger oder Konverter erreichen, aber von meiner Option unten kann die Möglichkeit in Betracht gezogen werden, während Sie die Entscheidung treffen

  1. Wenn Sie den TDD-Ansatz für die Entwicklung verwenden, gehen Sie zu Konvertern, da Sie Testfälle schreiben können.
  2. Wenn es irgendeine Geschäftslogik gibt, die besser im Konverter richtig programmiert werden kann und solche, die nicht durch Trigger erreicht werden können.
pchajer 22.06.2012 08:17
quelle
0

Sie sollten in den DomainModel-Objekten oder zumindest in einem ViewModel-Objekt immer geschäftliche Vorgänge ausführen. Es ist keine gute Option, geschäftliche Aufgaben in einem Konverter zu erledigen, da Konverter einen Wert von einem Typ in einen anderen konvertieren.

    
Jdek 22.03.2013 14:28
quelle

Tags und Links