Wer setzt DataContext in Silverlight MVVM
Habe ich gelesen, über das MVVM-Muster aus verschiedenen Quellen wie MSDN:
http://msdn.microsoft.com/en-us/magazine/dd419663.aspx
In diesem Artikel heißt es: im Gegensatz zu den Presenter im MVP, eine ViewModel-nicht mit einem Verweis auf einen Blick.
Wenn der View (XAML) nimmt an, dass es DataContext wird das ViewModel dann, wo im code die folgende Zeile:
view.DataContext = viewModel;
ViewModel nicht wissen, etwas über die Sicht so dass es nicht datacontext. Wenn ich das ViewModel die Referenz muss ich brechen, das MVVM-pattern? Meine andere Wahl ist, um irgendeine Art von generator-oder "extra" - Moderatorin, deren einziger job es ist, zum verdrahten der ganzen Sache (warten Sie für das loaded-Ereignis der Ansicht, DataContext).
Ich weiß, verschiedene Ansicht teilen können die gleichen DataContext (z.B. DataContext nur für das Hauptfenster und andere werden es sehen), aber in vielen Fällen nicht möglich ist, überhaupt noch machbar ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist eine große Frage, die viele Antworten. Es hängt alles davon ab, wie Sie wollen, die Architektur Ihrer Anwendung. Zum Beispiel verwende ich dependency injection, um meine IViewModel, was wiederum meine IView und meine IViewModel läuft IView.SetViewModel(das) an den Konstruktor.
Andere Menschen möglicherweise verwenden möchten, ein mehr Blendable Methode durch setzen des DataContext im Xaml:
Manchmal DataContext kann impliziert werden, damit es durch den Rahmen, wie in der Instanz von einem DataTemplate verwendet werden, von einem ItemsControl. Dies ist auch sehr verbreitet in desktop WPF, da es unterstützt die typisierte DataTemplates.
Also es gibt wirklich nicht einen falschen Weg zu DataContext, nur so lange, wie das, was Sie trennt betrifft, ist wartbar und ist auch leicht überprüfbar.
Shawn Wildermuth hat einen tollen Beitrag darüber, ob der View oder ViewModel kommt zuerst:
http://wildermuth.com/2009/05/22/Which_came_first_the_View_or_the_Model
Ich mag, und verwenden Sie seine Ehe-Konzept, wo eine 3rd-party-Klasse erzeugt die view und viewmodel, und dann verbindet die beiden. Es ist gut für mich gearbeitet.
Ich verwende MVVM viel mit PRISMA. In der PRISMA benutze ich Unity für dependecy injection. Deshalb habe ich ein interface für jede Klasse registriert mit der Einheit einschließlich der Anzeigen.
Die IView-Schnittstelle hat eine Methode wie diese:
ViewModel ruft diese Methode am Ende der Konstruktor und übergibt sich als parameter:
In der Ansicht.xaml.cs die IView-Schnittstelle implementiert wird. Wird dies der einzige code, den ich hinzufügen, um die codebehind der Ansicht:
Als für meine eigene Verwendung, das ViewModel kennt Sie nicht, die Ansicht, oder eine Schnittstelle für die Sicht. Und die meisten der Zeit, die Sicht nicht wissen, seine ViewModel, auch wenn es weniger wichtig ist. Der VM ist nur transprted vom DataContext.
Dadurch wird sichergestellt, dass die VM und V wird weiterhin in hohem Maße unabhängig. Verlinkung im gesamten Bindungen, Befehlen, Verhalten, Trigger & so weiter. Auch wenn VM ist oft sehr verwandten, zu einer bestimmten Ansicht ist, versuche ich, es so allgemein wie möglich, so dass ich wechseln kann und die entsprechenden Anzeigen, und /oder passen Sie die Ansicht Verhalten, ohne dass ein update der VM, es sei denn die architektonische Verbindung zwischen V und M ist betroffen !