Sto progettando un'applicazione WPF seguendo lo schema MVVM. In uno UserControl
(e infatti questa situazione si verifica molte volte), dal momento che è piuttosto complessa, che include ad esempio, TabControl
, mi piacerebbe dividerli in diversi sub UserControl
. Ad esempio, nella vista "principale", chiamiamola MainUC, ho un TabControl
, che ha due TabItem
. Dal momento che sia TabItem
comprende in realtà molti elementi dell'interfaccia utente, io disegno due UserControl
, SubUCA e SubUCB, in modo che il XAML di MainUC si presenta così:Come inizializzare Vista nidificata (e ViewModel) senza utilizzare il risolutore di dipendenze 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 >
Ma ora la mia domanda è: come dovrei organizzare il ViewModel (s) per questi UserControl
? Un modo, che sto attualmente usando, è solo avere una classe ViewModel (chiamata MainUC_VM), e il DataContext
di MainUC è impostato su questa istanza di classe (si noti che non sto usando l'integrazione delle dipendenze, quindi creo solo un'istanza nel codice- dietro a MainUC). Ma in questo modo la classe MainUC_VM diventerebbe davvero complicata, proprio come la MainUC. Quindi vorrei anche dividere il ViewModel in diverse classi. Per esempio, nella classe MainUC_VM, posso avere tali proprietà
public SubUCA_VM SubVM1 { get; set; }
public SubUCB_VM SubVM2 { get; set; }
Tuttavia, dal momento che non sto usando l'iniezione di dipendenza (perché la nostra squadra non ha deciso di usarlo), come posso fare la SubVM1 e SubVM2 diventare il DataContext
di SubUC1 e SubUC2 rispettivamente? Non riesco a crearne uno nel code-behind di SubUCA e SubUCB, poiché sarebbero diversi rispetto ai membri di proprietà in MainUC_VM.
Alcuni modi posso pensare sono, 1) rendono il singleton classi SubUCA_VM e SubUCB_VM (che è come lo stesso comportamento di iniezione di dipendenza ad esempio utilizzando, MEF di default), o 2) utilizzando EvengAggregator
a notificare al instantiate della oggetto. Ma in entrambi i casi sembra aggiungere una complessità inutile secondo me. Significa che l'iniezione di dipendenza è quasi indispensabile per utilizzare MVVM? C'è mai un modo per ottenerlo senza l'uso di DI?
Grazie! È davvero pulito! – tete