Ich entwerfe eine WPF-Anwendung nach MVVM-Muster. In einem UserControl
(und in der Tat passiert diese Situation viele Male), da es ziemlich komplex ist, was zum Beispiel TabControl
beinhaltet, möchte ich sie in mehrere Unter UserControl
teilen. Zum Beispiel, in der "Hauptansicht", nennen wir es MainUC, habe ich eine TabControl
, die zwei TabItem
hat. Da sowohl TabItem
viele UI-Elemente tatsächlich enthält, entwerfe ich zwei UserControl
, SubUCA und SubUCB, so sieht das XAML von MainUC wie folgt aus:So initialisieren Sie verschachtelte View (und ViewModel) ohne Verwendung von Abhängigkeit Resolver in WPF/MVVM
<TabControl Name="mainUC" Grid.Row="0" >
<TabItem Header="Sub UC A" Name="SubUC1">
<local:SubUCA />
</TabItem>
<TabItem Header="Sub UC B" Name="SubUC2">
<local:SubUCB />
</TabItem>
</TabControl >
Aber jetzt meine Frage ist: Wie soll ich das Viewmodel (e) veran diese UserControl
? Eine Möglichkeit, die ich derzeit verwende, ist nur eine ViewModel-Klasse (MainUC_VM) und die DataContext
von MainUC wird auf diese Klasseninstanz gesetzt (beachte, dass ich keine Abhängigkeitsinjektion verwende, also erstelle ich einfach eine Instanz im Code- hinter dem MainUC). Aber auf diese Weise würde die MainUC_VM-Klasse genauso kompliziert werden wie der MainUC. Daher möchte ich das ViewModel auch in mehrere Klassen aufteilen. Zum Beispiel in der MainUC_VM Klasse, kann ich solche Eigenschaften
public SubUCA_VM SubVM1 { get; set; }
public SubUCB_VM SubVM2 { get; set; }
jedoch habe, da ich nicht Dependency Injection bin mit (weil unser Team, es zu benutzen nicht entschieden hat), wie ich die SubVM1 und SubVM2 machen werden die DataContext
von SubUC1 und SubUC2 jeweils? Ich kann nicht einen in der Code-Behind SubUCA und SubUCB instanziieren, da sie andere als die Eigenschaft Mitglieder in der MainUC_VM wären. Einige Möglichkeiten
ich denken kann, sind 1) die SubUCA_VM und SubUCB_VM Klassen Singleton machen (die wie das gleiche Verhalten von Dependency Injection ist mit zB MEF in der Standardeinstellung), oder 2) mit EvengAggregator
die instantiate des benachrichtigen Objekt. Aber beides scheint meiner Meinung nach unnötige Komplexität hinzuzufügen. Bedeutet dies, dass die Abhängigkeitsinjektion fast ein Muss ist, um MVVM zu nutzen? Gibt es jemals einen Weg, dies ohne Verwendung von DI zu erreichen?
Danke! Das ist wirklich nett! – tete