2009-04-01 7 views
10

Ich mag MVVM Muster, sobald Sie anfangen, es zu verwenden, werden Sie süchtig danach.WPF MVVM Verwenden von Befehlen im Vergleich zu Ereignishandlern

Ich weiß, dass in der perfekten Welt Ihre View-Code-Behind fast leer ist (vielleicht etwas Code im Konstruktor) und jeder Aspekt von View von ViewModel manipuliert wird.

Es gibt jedoch Zeiten, in denen das Erstellen neuer Felder, Eigenschaften, Befehle in ViewModel mehr Code erzeugt als das Implementieren desselben im Ereignishandler.

Im Moment bleibe ich folgende Regel:

Wenn Code Ereignishandler sehr kleinen Teil manipuliert davon Ansicht (Schriftart bestimmten Textblockes zum Beispiel Schaltfläche Click-Ereignishandler erhöht, die auf der gleiche Ansicht gelegen ist) ist es dann mit OK implementieren Sie Logik in Event-Handlern. Wenn View jedoch Geschäftslogik manipulieren oder auf Ressourcen zugreifen muss, die sich außerhalb der Sicht befinden, weisen Sie diese Verantwortlichkeiten ViewModel zu.

Was denken Sie über meinen Ansatz?

Was vermeiden Sie bei der Verwendung von Event-Handlern und ViewModel?

Welche Best Practices können Sie empfehlen, wenn Sie MVVM-Muster verwenden?

Antwort

14

Ich würde sagen, Ihre Faustregel ist nicht schlecht.

Aus meiner Sicht ist das Kernproblem "Ist der Code View-spezifische oder adressiert Business-Logik?".

Es ist OK, Code in der Ansicht zu haben, wenn dieser Code genau hier ist, um die Ansicht zu ändern und keine Art von Geschäftslogik auszuführen. Ihr Beispiel für das Ändern einer Schriftgröße ist ein Paradebeispiel für Code, der in einer Ansicht völlig in Ordnung ist (und das Rauschen in einem ViewModel erhöhen würde, was das Verständnis und die Pflege erschwert). Im Wesentlichen tun Sie das schon, wenn Sie Trigger verwenden, also ist es nicht so komisch.

Denken Sie jedoch daran, wenn Sie Komponententests verwenden, wird es sehr schwierig sein, dieses Bit der View-Logik zu testen. Wenn Sie es getestet haben, können Sie es besser in das Viewmodel einfügen.

2

Ich glaube, ich, was zum vorherigen Kommentar auch hinzufügen kann,

Stattdessen Event-Handler zu verwenden, aus sehr bescheidener Erfahrung, Befehle geben mir viel mehr Flexibilität in dem Sinne, dass es einen unabhängigen Mechanismus bereitstellt, um zu antworten Ereignisse/Aktionen von verschiedenen Kontrollen mit der Fähigkeit, den Status des Befehls selbst zu überprüfen.