Dépannage de la dépendance de la dépendance dans UserControls
Définition d'un DataContext
à this
d'un USerControl peut perturber les liaisons de données inattendues aux propriétés de contrôle des parents. Cela se produit parce que la liaison perd l'héritage de la propriété DataContext
.
Le problème expliqué
Lorsque le DataContext
d'un userControl est défini sur lui-même, les liaisons dans UserControl tentant d'accéder aux propriétés à partir du modèle de vue d'un contrôle parent échoueront. Le mécanisme de liaison ne peut pas trouver la propriété cible car elle regarde dans le mauvais contexte (l'UserControl lui-même, pas son parent).
La solution: levier RelativeSource
La solution consiste à éviter de régler DataContext = this
dans le constructeur de UserControl. Au lieu de cela, utilisez RelativeSource
dans la liaison XAML pour cibler explicitement le contrôle parent DataContext
.
Voici comment ajuster la liaison XAML:
<TextBox Text="{Binding SelectedFile, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" />
Cette liaison recherche désormais correctement l'arborescence visuelle pour trouver le DataContext
de l'ancêtre le plus proche du type UserControl
, accédant efficacement au modèle de vue du parent.
Pour terminer la configuration, liez la propriété SelectedFile
de userControl à la propriété correspondante dans le modèle de vue du parent:
<FileBrowserControl SelectedFile="{Binding SelectedFile}" />
Cette approche garantit un lien approprié entre la dépendance SelectedFile
DependencyProperty de l'UserControl et la propriété du modèle de vue du parent, résolvant le problème de liaison.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!