Comment accéder à un parent DataContext d'un UserControl
j'ai besoin d'accéder au conteneur du DataContext d'un UserControl (une grille contenant des zones de texte et un contrôle listbox: j'ai besoin d'insérer des éléments dans cette zone de liste) que j'ai créé en WPF: qui est le meilleur moyen de le faire? Je pensais passer le DataContext comme paramètre de contrôle de l'utilisateur, mais pense qu'il y a une manière plus propre de le faire
Merci d'avance !
OriginalL'auteur Cris | 2011-07-04
Vous devez vous connecter pour publier un commentaire.
Normalement le
DataContext
sera hérité, il suffit de ne pas explicitement définie sur laUserControl
et il fera de son parent. Si vous êtes, vous pouvez toujours utiliser leParent
propriété afin d'obtenir le parent, qui vous peut-coffre-fort-cast pour unFrameworkElement
et si elle n'est pas null, vous pouvez saisir sonDataContext
.Eh bien, vous pouvez écrire une méthode qui juste marche vers le haut de l'arbre et obtient tous uniques
DataContexts
, je pense que je pourrais même avoir fait quelque chose comme ça avant.OriginalL'auteur H.B.
J'ai parfois imbriqués les contrôles Utilisateur et un petit-enfant usercontrol doit parfois les grands-parents en vue du contexte de données. La façon la plus simple que j'ai trouvé pour l'instant (et je suis un peu un newbie) est d'utiliser les éléments suivants:
J'ai écrit un exemple plus détaillé sur mon blog si vous voulez plus de détails.
OriginalL'auteur Tod
Ajouter cette BindingProxy classe à votre projet:
Data="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}},Path=DataContext}"
Si vous besoin de quelque chose de plus complexe, vous pouvez utiliser un convertisseur personnalisé.Vous avez maintenant accès à ce parent, du DataContext:
{Binding Data.MyCommand, Source={StaticResource BindingProxy}}
OriginalL'auteur jv_
H. B. répond à la question dans votre titre.
Cependant, le texte pose une autre question de conception. Je voudrais vous demander de revoir votre conception.
Un contrôle hérite de la propriété DataContext de son ancêtre tant que personne n'entre explicitement remplace.
Si l'utilisateur aux besoins de contrôle des données, il doit l'obtenir à partir de sa source de données (un viewmodel pour le contrôle de l'utilisateur). Donc dans ce cas, le contrôle de l'utilisateur peut obtenir les données dont il a besoin à partir de la
ListItemsForDisplay
propriété exposée sur leSomeViewModel
instance. Aucun besoin de se parent et jeté.. beaucoup plus propre.OriginalL'auteur Gishu