2016-03-21 11 views
0

Ich lerne Silverlight/MVVM. Jetzt habe ich ein Problem mit Befehlen, die ich denke, sind einfach zu kompliziert. Ich wollte auf Kind-Fenster nach Befehl schließen.
Nach der Trennung von concers sollte es aus Sicht ausgeführt werden, wie ich es verstehe.
Soweit ich nach Lösung suchte, fand ich es und es war nicht trivial für solch eine triviale Aufgabe.MVVM ohne Befehle

Um es zusammenzufassen, ich muss sagen, dass die Trennung von Ansicht, Viewmodel und Modell großartige Ideen sind.
Binding von View zu ViewModel ist auch schön und sauber. Aber was ist mit Befehlen. Wie ich verstehe, sind sie nur ein Stück Code, um auszuführen (wie Delegierte). Aber sie sind zu kompliziert und mühsam.

Ich möchte Ihre Meinung wissen. Was ist mit der Idee, dass VieModel Eigenschaften und normale öffentliche Methoden haben würde, dass es von Ereignissen der Ansichten ausgeführt wird. Wenn ich kein view-bezogenes Element an das View-Modell übergebe, wird es immer noch MVVM sein, oder?

Natürlich wird es einen Nachteil geben, dass ich IsEnabled separat an Eigenschaften in ViewModel binden muss, um CanUpdate Funktionalität von Befehlen nachzuahmen. Es ist nicht so, dass Sie ViewModel nicht kennen. Ansichten sind nicht sehr überprüfbar, oder?

Es wäre sehr flexibel. Zum Beispiel, in Ereignis für den Klick würde ich einige strenge Ansicht Logik, Call-Methode von ViewModel-Objekt und dann vielleicht eine andere Methode aufrufen und nach allem, dass einige mehr Sicht Logik.

Also, was denkst du?

+0

Hehe, habe ich nur Minus von einem MVVM/XAML puristische bekommen noch berücksichtigen nicht die einzig richtige Weg zu tun? – Iceman

Antwort

2

Sie können versuchen, mit Cailburn.Micro. Es ist ein Open-Source-Framework, das über WPF läuft und einige seiner Komplexitäten versteckt. Beispielsweise ersetzt er Befehlsklassen durch einfache Methodenaufrufe.

Sie können das Schließen von Fenstern implementieren, indem Sie ein spezielles Ergebnis zurückgeben, mit dem die Ansicht tatsächlich geschlossen wird. Auf diese Weise ist Ihr ViewModel immer noch vollständig mit Einheiten testbar, da Sie überprüfen können, ob das erwartete Ergebnis zurückgegeben wird, und es ist nicht sichtbereit. Hier

ist ein Beispiel dafür, wie dies zu implementieren: https://stackoverflow.com/a/10175228/258737

+0

Die Verwendung von netten Rahmen scheint in Ordnung, aber ich frage mich, ob ich Framework implementieren muss, um so einfache Dinge wie offene Kind-Fenster zu tun. Es gibt keinen _native_ Weg? – Iceman