Maison >développement back-end >C++ >Pourquoi ma dépendance de la liaison de dépendance ne met-elle pas à jour le parent ViewModel?

Pourquoi ma dépendance de la liaison de dépendance ne met-elle pas à jour le parent ViewModel?

DDD
DDDoriginal
2025-02-01 17:21:09520parcourir

Why Doesn't My DependencyProperty Binding Update the 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

lors de la sélection de fichiers.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn