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?
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 nurOneWay
Operationen ausführen, währendConverters
TwoWay
Operationen ausführen kann
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?
Zusätzlich zu dem, was oben gesagt wurde, kann ich nur hinzufügen:
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
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.