2012-12-06 21 views
12

Sto provando a creare un'applicazione utilizzando il modello MVVM con i modelli di visualizzazione nidificati. Il master viewmodel è ShellView che contiene tre UserControls, ciascuno con il proprio viewmodel. Lo ShellView ViewModel viene creato nel code-behind in questo modo:Impostazione del datacontext di UserControl su ViewModel definito nel modello di visualizzazione principale

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

Ora, il mio ShellViewModel contiene gli altri ViewModels come proprietà:

public CustomerViewModel CustomerViewModel { get; set; } 

    public ContactsViewModel ContactsViewModel { get; set; } 

Come si accede a questi oggetti di XAML dei controlli utente? Mi piacerebbe essere in grado di fare qualcosa del tipo:

DataContext="<<ParentWindowViewModel>.CustomerViewModel> 

Come posso realizzare questo? Ho già provato:

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

ma il debugger dice "Impossibile risolvere proprietà 'CustomerViewModel' nel contesto dati di tipo 'oggetto' Qualsiasi aiuto sarebbe apprezzato

risposta

13

Hai semplicemente bisogno di utilizzare

DataContext="{Binding CustomerViewModel}" 
..

Hai già impostato DataContext = _shellViewModel; nel tuo costruttore, in modo che il datacontext dell'intera finestra venga impostato su ShellViewModel, quindi quando definisci un'associazione, cerca il percorso nel datacontext che hai definito. volere cercare la proprietà CustomerViewModel nell'istanza ShellViewModel.