Wie kann ich die kombinieren MVVM-und Dependency Injection in einer WPF-Anwendung?
Kannst du bitte ein Beispiel geben, wie würden Sie (Ihre Lieblings -) DI-framework Draht MVVM View Modelle für eine WPF-app?
Erstellen Sie eine stark verbundene Hierarchie von View-Modelle (wie, wo jedes verschachtelten Steuerelement "ViewModel" ist eine Eigenschaft, die auf einem parent - ViewModel und binden Sie es zu verschachtelten Steuerelement DataContext im XAML) oder Sie verwenden würden, eine Art von noch-mehr-Abstrakt", "Ansicht Modell" Manager", die behauptet, einige schwach verbundenen Hierarchie,... wie in der KABINE, vielleicht?
InformationsquelleAutor Max Galkin | 2009-11-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn ein view-Modell kann nur existieren in der Verbindung mit anderen, erschaffe ich eine starke Beziehung. Das ist der Besitz view-Modell haben einen direkten Bezug zu einem oder mehreren der abhängigen view-Modelle. Wenn auf der anderen Seite ein view-Modell sollte in der Lage sein, zu existieren, mit oder ohne ein anderes ich mit einem lose gekoppelten Ansatz, bei dem Sie kommunizieren über einen event-bus.
In Bezug auf die Verwendung von DI MVVM, absolut können Sie kombinieren die zwei. Es ist so einfach wie:
Beachten Sie jedoch, dass dies geht von einer "view-model first" - Ansatz zu MVVM, das hat seine Nachteile.
Was meinst du mit "aktiv" / "passiv" Anzeigen-Modell, Marke?
Kent Boogaart Beispiel ist eine "aktive" ViewModel, weil es dauert eine Abhängigkeit und man muss davon ausgehen, dass es Absichten zu nutzen, die Abhängigkeit in einer aktiven Art und Weise. Eine "passive " ViewModel", auf der anderen Seite, ist eine, die Sie erstellen und füllen Sie mit Daten, und sobald Sie das getan haben, ist es eigenständig.
Dies ist auch bekannt als view-model-first versus Sicht-ersten. Ich bevorzuge VM-zunächst aber verstehen, dass er nicht gut mit Mischen. Jedem das seine eigenen, ich Schätze.
Um ehrlich zu sein, ich habe mich verändert meine Sicht ein bisschen in den letzten 8 Monaten. Ich würde lieber passive ViewModels, aber in MVVM-es funktioniert besser mit aktiven ViewModels. In ASP.NET MVC, OTOH, passive ViewModels sind viel leichter zu streiten, denn wir können Controller verwenden, um Sie zu füllen. Unterschiedliche Kontexte erfordern unterschiedliche Lösungen...
InformationsquelleAutor Kent Boogaart
In WPF ist es normalerweise ziemlich einfach, und es ist nicht wirklich abhängig, insbesondere DI-Container. Haben Sie gelesen Josh Smith ' s Artikel über MVVM? Es ist ziemlich viel beschrieben, wie die Einrichtung einer Hierarchie von ViewModels.
Was Sie nicht gehen zu viel ist, wie man diese ViewModels aus Abhängigkeiten (wie Repositories), aber es ist nicht eine schwierige extrapolation zu tun.
Habe ich oft erlebt, dass liberale Verwendung von Abstrakten Fabriken hilft ziemlich viel in dieser Hinsicht. Statt direkt neue ' Ing bis ViewModels lass ich ein eingefügtes Werk, das für mich tun.
Können Sie Poor Man ' s DI oder jede Art von DI-Container zu verdrahten solche Betriebe für Sie.
Sie werden überrascht sein, wie viele Menschen nutzen das MVVM-Begriff hier auf StackOverflow, ohne den Artikel zu Lesen.
Thx für die Zeiger, es ist eine ausgezeichnete Artikel.
InformationsquelleAutor Mark Seemann
Veröffentlichte ich dieser Artikel über Code-Projekt über, wie man eine erweiterbare WPF-app mit MVVM und MEF für die Erweiterbarkeit. Jedoch, wenn Sie genau hinsehen, die ich verwendet, MEF für DI als gut.
Die Anwendung ist vollständig MVVM und verwendet nur DataTemplates (und gelegentlich Fenster) für Ansichten, genau wie bei Josh Smith ' s Artikel. WPF übernimmt die Anwendung die richtige Ansicht die richtige ViewModel für Sie. Es ist süß.
Es nutzt MEF, so dass die Teile einander "finden". Also das ViewModel für den Menüpunkt "Ansicht" findet alle Menüpunkte, die eigentlich in das Untermenü mit extension points und die ViewModels für alle "finden" ViewModel " sollen Sie an hand auf den layout-manager über die Zusammensetzung Punkte. Sie auch "finden" wird die layout-manager-Dienst mithilfe einer rudimentären service locator (MEF). Im Menü Ansicht Beispiel ist fast genau das, was du redest, mit verschachtelten ViewModels. Die kühle Sache ist, dass Sie sich gar nicht kennen einander erst zur Laufzeit.
InformationsquelleAutor Scott Whitlock