WPF: Réglage DataContext d'un UserControl avec la Liaison ne fonctionne pas dans le XAML

Que j'essaie de faire ma première application WPF, de travail en utilisant MVVM, et j'ai touché un peu contraignant problème.

La configuration est que j'ai une vision & viewModel qui détient les détails de l'Utilisateur (la maison mère), et pour essayer de garder les choses simples, j'ai mis une section de ce point de vue dans une vue séparée & viewModel (l'enfant). La vue enfant est défini comme un UserControl.

La question que je vais avoir est de savoir comment définir le DataContext de la vue enfant (UserControl). Mes parents ViewModel a une propriété qui expose l'enfant ViewModel, comme suit:

class ParentViewModel: INotifyPropertyChanged
{
    public ChildViewModel childViewModel { get; set; }
    //...
}

Dans le code XAML pour ma mère qui a du DataContext ensemble de la ParentViewModel), j'essaie de régler le DataContext de la vue enfant comme suit:

<views:ChildView 
    x:Name="ChildView"
    DataContext="{Binding childViewModel}"/>

Toutefois, cela ne fonctionne pas. Le DataContext de la vue enfant est défini de la même DataContext de la vue parent (c'est à dire la ParentViewModel), comme si je n'étais pas à tous. J'ai aussi essayé le réglage de la DataContext de la vue enfant lui-même, qui a également ne fonctionne pas:

<UserControl x:Class="DietRecorder.Client.View.ChildView"
    DataContext="childViewModel"

J'ai trouvé un couple de façons de contourner cela. Dans la vue enfant, je peux lier de tout, y compris la ChildViewModel dans le chemin d'accès:

<SomeControl Visibility="{Binding Path=childViewModel.IsVisible}">

mais je ne veux pas de l'enfant en vue de ce niveau de prise de conscience de la hiérarchie. Réglage de la DataContext dans le code fonctionne aussi - cependant, je dois faire après avoir montré la vue parent, sinon le DataContext est juste écrasé quand je l'appelle Show():

parentView.Show();
parentView.ChildView.DataContext = parentViewModel.childViewModel;

Ce code me fait aussi mal à l'aise, ce qui avec le niveau de détail de la violation et de tous.

C'est juste le DataContext qui semble être le problème - je peux lier d'autres choses de l'enfant, par exemple, j'ai essayé de liaison de la FontSize int propriété juste pour le tester:

<views:ChildView 
    x:Name="ChildView"
    FontSize="{Binding Path=someVal}"/>

Et qui fonctionne très bien.

Mais je suis sûr que la liaison du DataContext de travail - j'ai vu des exemples similaires de ce genre de chose. Ai-je manqué quelque chose d'évident ici? Est-il une raison pour laquelle cela ne fonctionne pas? Est-il une faute de frappe quelque part? (J'ai renommé les choses à votre avantage afin que vous ne serez pas en mesure de m'aider de toute façon).

Toutes les pensées de bienvenue.

Modifier

L'examen de ce code, il semble que j'ai fait une erreur quelque part, comme le code XAML suivant dans la vue parent semble maintenant au travail:

<views:ChildView 
    x:Name="ChildView"
    DataContext="{Binding childViewModel}"/>

Je ne sais pas pourquoi je ne pouvais pas le faire fonctionner à l'origine, ou ce que je pourrais avoir changé pour le faire fonctionner. C'était peut-être le INotifyPropertyChanged question comme l'une des réponses suggère. Eh bien, à partir et vers le haut..

OriginalL'auteur Grant Crofton | 2010-04-18