Maison >développement back-end >C++ >Pourquoi ma dépendance de la liaison de dépendance ne met-elle pas à jour le parent ViewModel?
Dépannage des liaisons de dépendance de la prévention dans un contrôle du navigateur de fichiers
Lors de la création d'un contrôle de navigateur de fichiers personnalisé, un problème courant se pose lors de la sélection d'un fichier met à jour la zone de texte interne du contrôle mais ne propage pas la modification vers la propriété SelectedFile
dans le modèle de vue parent. Cela se produit même lorsque vous utilisez une DependencyProperty
et une liaison standard.
La cause profonde résulte souvent de la définition du DataContext
de l'UserControl à lui-même dans son constructeur:
<code class="language-csharp">DataContext = this;</code>
Cette auto-référence DataContext
remplace les DataContext
hérités du parent, brisant la liaison au modèle de vue parent.
Solution: utilisation RelativeSource
liaison
La solution consiste à modifier la liaison dans le XAML de UserControl pour cibler explicitement le modèle de vue parent. Utilisez RelativeSource
pour traverser l'arbre visuel:
<code class="language-xaml"><TextBox Text="{Binding SelectedFile, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" /></code>
Cette liaison révisée garantit que la propriété SelectedFile
dans le sous-allonge se lie correctement à la propriété SelectedFile
du modèle de vue parent, même lorsque le DataContext
de l'UserControl est défini en interne.
Maintenant, lorsque vous incorporez l'UserControl:
<code class="language-xaml"><FileBrowserControl SelectedFile="{Binding SelectedFile}" /></code>
La liaison fonctionnera comme prévu, mettant à jour la propriété SelectedFile
du modèle parent
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!