2011-01-08 10 views
0

Im Moment habe ich eine ziemlich große ViewModel namens MainViewModel, die eine Menge von Befehlen und Eigenschaften enthält, die in vernünftig benannte ViewModels organisiert werden könnten.Wie verschachtle ich mehrere ViewModels in einem ViewModel der obersten Ebene in einer Art Hierarchie, die in meinen Ansichten verteilt werden kann?

aber ich, nur ein Fenster haben, und so müssen in der Lage sein, um herauspicken die gültigen Daten und Befehle von jedem der SubViewModels ....

ich meine, diese Eigenschaften mit Hilfe erreicht werden könnte, aber Ich bin mir nicht sicher, wie ich das im XAML angehen soll. (Oder, wenn es eine Implikation in den Viewmodels selbst)

Ich weiß, dass ich die DataContext auf Subviews einstellen können, wie ich es sehen, aber ich möchte, dass meine Ansicht die Hierarchie/Organisation meines Viewmodels diktieren vermeiden müssen.

Ex. Pseudo-Code

SubAViewModel mvmB = new SubBViewModel(); 
SubAViewModel mvmA = new SubAViewModel(); 
MainViewModel mvm = new MainViewModel(mvmA, mvmB); 

<Window DataContext="{StaticResource MainViewModel}"> 

    //This is clearly wrong but is sort of what I am trying to achieve 
    <MenuItem Command="{Binding Path=MainViewModel.SubAVM.TargetCmd}" /> 

Es ist durchaus möglich, dass ein MenuItem oder ein anderes UserControl einen Befehl in SubBViewModel und eine Eigenschaft in SubAViewModel zugreifen möchten.

Antwort

3

Wenn Sie den Datenkontext des Blicks auf die MainViewModel und Sie die SubAVM als Eigenschaft wie dieses aussetzen:

public SubViewModel SubAVM { 
    get { 
     return subAVM; 
    } 
    set{ 
    if (subAVM == value) 
    { 
     return; 
    } 
    subAVM = value; //implement the OnPropertyChanged ... 
    } 
} 

Natürlich ist der Weg auf einem MenuItem, wie durch die SubAVM.TargetCmd würde Abhängigkeitshierarchie Der Hauptpfad ist bereits MainViewModel für ein Menü.

+0

Verrückt, hatte ich meine Zweifel, aber das funktioniert tatsächlich. Vielen Dank. – Nicholas

+0

Gern geschehen! – Raffaeu