0

J'ai une application WPF qui utilise un contrôle utilisateur WPF.La définition de DataContext rend null PropertyChanged dans UserControl

Le contrôle utilisateur expose un DependencyProperty auquel je voudrais me lier dans mon application WPF.

Tant que mon contrôle utilisateur ne définit pas son propre DataContext, cela fonctionne et je suis capable d'écouter les changements dans DependencyProperty.

Cependant, au moment où j'ai défini le DataContext, le PropertyChanged appelé est null.

Qu'est-ce qui me manque ici?

Exemple de code: https://skydrive.live.com/redir.aspx?cid=367c25322257cfda&page=play&resid=367C25322257CFDA!184

+0

Vous obtiendrez plus d'aide si vous postez un simple exemple de code démontrant le problème ici, au lieu de poster des liens vers un site externe ... –

Répondre

0

DependencyProperty a la propriété d'héritage, donc si vous ne définissez pas DataContext, le DataContext est héritée de DataContext du MainWindow du UserControlDP. Dans ce cas, DataContext de UserControlDP dans votre code ci-dessous est défini comme MainWindow_ViewModel. Ainsi, la liaison est correctement exécutée.

<usercontrol:UserControlDP Width="200" Height="100" 
    TestValue="{Binding TestValueApp, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnTargetUpdated=True}" 
    Margin="152,54,151,157"></usercontrol:UserControlDP> 

Dans l'autre cas, DataContext de UserControlDP est défini comme UserControlDP_ViewModel, de sorte que la liaison est brisée. Vous pouvez voir le premier message d'exception comme suit dans la fenêtre de débogage.

System.Windows.Data Error: 40 : BindingExpression path error: 'TestValueApp' property not found on 'object' ''UserControlDP_ViewModel' (HashCode=24672987)'. BindingExpression:Path=TestValueApp; DataItem='UserControlDP_ViewModel' (HashCode=24672987); target element is 'UserControlDP' (Name=''); target property is 'TestValue' (type 'Object') 
0

Envisagez de définir DataContext sur l'un des éléments contenus dans UserControl plutôt que sur UserControl lui-même.

0

Merci pour la saisie et la clarification des détails. Après avoir réfléchi, j'ai pris le chemin de la facilité et j'ai retiré le ViewModel du système de contrôle. MVVM pour l'application mais pas MVVM pour le contrôle utilisateur. De cette façon, je n'utilise aucune liaison dans le contrôle utilisateur, à la place, j'utilise les propriétés de dépendance qui sont liées dans l'application principale.

Questions connexes