Maison >développement back-end >C++ >Pourquoi ma liaison XAML ne met-elle pas à jour ma propriété de dépendance ?
Dépannage des problèmes de liaison WPF XAML avec les propriétés de dépendance
Cet article traite d'un problème WPF courant : la liaison de données XAML ne parvient pas à mettre à jour l'interface utilisateur lorsqu'une propriété de dépendance change, même si la liaison code-behind fonctionne correctement.
Scénario :
Une application WPF utilise une propriété de dépendance en XAML, mais la liaison ne met pas à jour l'interface utilisateur lorsque la valeur de la propriété liée change. Cependant, la liaison code-behind fonctionne comme prévu.
Définition de la propriété de dépendance (incorrecte) :
<code class="language-csharp">public static readonly DependencyProperty TestProperty = DependencyProperty.Register("Test", typeof(string), typeof(MyControl), new PropertyMetadata("DEFAULT"));</code>
Liaison XAML (problème) :
<code class="language-xaml"><TextBlock Text="{Binding Test}"></TextBlock></code>
La solution :
Le problème principal réside dans l'enregistrement des propriétés de dépendance et la liaison XAML. Voici l'approche corrigée :
Définition de propriété de dépendance corrigée :
<code class="language-csharp">public static readonly DependencyProperty TestProperty = DependencyProperty.Register( nameof(Test), // Use nameof for better maintainability typeof(string), typeof(MyControl), new PropertyMetadata("DEFAULT"));</code>
Liaison XAML corrigée :
<code class="language-xaml"><TextBlock Text="{Binding Test, RelativeSource={RelativeSource AncestorType=UserControl}}"></TextBlock></code>
Ce XAML corrigé définit explicitement le RelativeSource
pour trouver le UserControl
comme source de liaison.
Considérations importantes :
Évitez de définir DataContext dans le constructeur UserControl : La définition du DataContext
dans le constructeur d'un UserControl
empêche l'héritage du DataContext
du parent, provoquant souvent des échecs de liaison.
Alternative : liaison explicite dans le code-behind : Si l'utilisation de RelativeSource
n'est pas pratique, définissez la liaison explicitement dans le code-behind :
<code class="language-csharp">TheControl.SetBinding(MyControl.TestProperty, new Binding { Source = DataContext, // Use the MainWindow's DataContext Path = new PropertyPath("MyText"), Mode = BindingMode.TwoWay });</code>
En suivant ces étapes, vous pouvez vous assurer que vos liaisons XAML mettent correctement à jour vos propriétés de dépendance, conduisant ainsi à une application WPF fonctionnelle et réactive.
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!