2012-12-06 12 views
12

Próbuję utworzyć aplikację przy użyciu wzorca MVVM z zagnieżdżonych viewmodels. Master viewmodel to ShellView, który zawiera trzy kontrolki UserControl, z których każdy ma swój własny model widoku. ShellView ViewModel jest tworzony w kodzie-za tak:Ustawianie datacontekstu UserControl na ViewModel zdefiniowany w nadrzędnej viewmodel

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

Teraz moja ShellViewModel zawiera inne ViewModels jak właściwości:

public CustomerViewModel CustomerViewModel { get; set; } 

    public ContactsViewModel ContactsViewModel { get; set; } 

Jak uzyskać dostęp do tych właściwości z XAML z UserControls? Chciałbym móc zrobić coś takiego:

DataContext="<<ParentWindowViewModel>.CustomerViewModel> 

Jak mogę to zrobić? Próbowałem już:

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

ale debugger mówi „Nie można rozwiązać właściwość«CustomerViewModel»w kontekście danych typu«obiektu»Każda pomoc będzie mile widziane

Odpowiedz

13

Wystarczy użyć

DataContext="{Binding CustomerViewModel}" 
..

Ustawiłeś już DataContext = _shellViewModel; w swoim konstruktorze, tak że ustawia datakekst całego okna na ShellViewModel, więc kiedy definiujesz wiązanie, szuka ścieżki w zdefiniowanym przez ciebie punkcie danych. będzie poszukaj właściwości CustomerViewModel w instancji ShellViewModel.