2012-12-06 14 views
12

Ich versuche eine Anwendung zu erstellen, die das MVVM-Muster mit verschachtelten Viewmodels verwendet. Das Hauptansichtsmodell ist ShellView, das drei Benutzersteuerelemente mit jeweils einem eigenen Ansichtsmodell enthält. Das ShellView Ansichtsmodell wird in erstellt Code-Behind etwa so:DataContext von UserControl auf ViewModel setzen, das im übergeordneten ViewModel definiert ist

public ShellView() 
{ 
    InitializeComponent(); 
    _shellViewModel = new ShellViewModel(); 
    DataContext = _shellViewModel; 
} 

Nun, mein ShellViewModel die anderen Viewmodel als Eigenschaften enthält:

public CustomerViewModel CustomerViewModel { get; set; } 

    public ContactsViewModel ContactsViewModel { get; set; } 

Wie greife ich auf diese Eigenschaften vom XAML der Benutzersteuerelemente? Ich möchte in der Lage sein, etwas zu tun wie:

DataContext="<<ParentWindowViewModel>.CustomerViewModel> 

Wie kann ich das erreichen? Ich habe bereits versucht:

DataContext="{Binding DataContext.CustomerViewModel, RelativeSource={RelativeSource FindAncestor, AncestorType=Window, AncestorLevel=1}, Path=DataContext.CustomerViewModel}"> 

aber der Debugger sagt: „Kann nicht lösen Eigenschaft‚CustomerViewModel‘in Datenkontext vom Typ‚Objekt‘Jede mögliche Hilfe geschätzt

Antwort

13

Sie einfach

DataContext="{Binding CustomerViewModel}" 
verwenden müssen..

Sie haben in Ihrem Konstruktor bereits DataContext = _shellViewModel; festgelegt, sodass der Datenkontext des gesamten Fensters auf ShellViewModel festgelegt wird. Wenn Sie also eine Bindung definieren, sucht sie nach dem Pfad im Datenkontext, den Sie definiert haben werden Suchen Sie nach der CustomerViewModel Eigenschaft auf Ihrer ShellViewModel Instanz.

Verwandte Themen