Il s'agit d'une situation commune dans les applications XAML basées sur XAML (WPF / Silverlight / WinRT). P>
lien associé WPF -> WPF Databinding: Comment Est-ce que j'accède au contexte de données "parent"? P>
Les deux sont manquants dans l'API WinRT. Comment accéder aux parents (peut ne pas être immédiat), (Je suis conscient de RelateSource code> avec
ancestortype code> et
mode = FINDANCESTOR code> vient généralement à secourir dans WPF. P>
DataContext code>? P>
templatedbinding code> et
elementbinding code> mais les deux ne sont pas appropriés surtout dans DaTatemplate). P>
3 Réponses :
La liaison ElementName est toujours possible et pourrait fonctionner dans votre cas. Sinon, vous devez mettre en œuvre un comportement attaché. P>
Il y a plusieurs façons de faire face à ce problème: p>
La liaison ElementName est l'approche la plus courante, comme l'a souligné Filip. P>
Vous pouvez parcourir un arbre visuel jusqu'à ce que vous trouviez le parent. C'est ce que le trouvacestor fait en interne. Vous pourriez vous habiller dans un comportement pour une réutilisation facile. P>
Si vous utilisez Afficher les modèles, vous pouvez utiliser des messages au lieu de liaisons ou vous pouvez ajouter du contexte parent à chaque modèle de vue enfant. P>
Cueillir la meilleure solution dépendra de vos circonstances spécifiques. P>
Je viens d'avoir le même problème. Vraisemblablement, cela est courant ??
Voici une solution brute qui fonctionne: p>
lie la propriété Tag d'un élément de niveau supérieur au DataContext p>
Liez la propriété que vous souhaitez via ElementName dans l'élément imbriqué, c'est-à-dire P>
Bonne suggestion, mais c'est Elémentbinding . Il ne fonctionne pas à l'intérieur DATATEMPLATE . Le comportement ci-joint semble être la voie à suivre.
Il fonctionne à l'intérieur de DataTemplate - vous liez la balise de l'élément (parent), qui a une référence au parent DataContext. J'utilise tout le temps de l'intérieur des éléments de DaTatemplate pour se lier au niveau DataContext de niveau supérieur.
Vous pouvez simplifier cela avec la suppression de la balise et utilisez simplement le DataContext directement {reliure DataContext.SomeProp, elenname = Gridtop}