La liaison XAML échoue sur les propriétés de dépendance
La liaison de données pour les propriétés de dépendance n'a aucun effet en XAML, mais fonctionne bien en code-behind. L'extrait de code suivant illustre le problème :
<code class="language-xml"><UserControl ...="" x:Class="WpfTest.MyControl"> <TextBlock Text="{Binding Test}"/> </UserControl></code>
Les propriétés de dépendance sont définies comme suit :
<code class="language-csharp">public static readonly DependencyProperty TestProperty = DependencyProperty.Register("Test", typeof(string), typeof(MyControl), new PropertyMetadata("DEFAULT")); public string Test { get { return (string)GetValue(TestProperty); } set { SetValue(TestProperty, value); } }</code>
Dans la fenêtre principale, la liaison aux propriétés normales fonctionne parfaitement :
<code class="language-xml"><TextBlock Text="{Binding MyText}"/></code>
Cependant, la même liaison dans le contrôle utilisateur ne met pas à jour le texte :
<code class="language-xml"><MyControl Test="{Binding MyText}" x:Name="TheControl"/></code>
Il convient de noter que la liaison fonctionne correctement lorsqu'elle est implémentée dans le code-behind :
<code class="language-csharp">TheControl.SetBinding(MyControl.TestProperty, new Binding { Source = DataContext, Path = new PropertyPath("MyText"), Mode = BindingMode.TwoWay });</code>
Solution :
Déclaration correcte des propriétés de dépendance :
<code class="language-csharp">public static readonly DependencyProperty TestProperty = DependencyProperty.Register( nameof(Test), typeof(string), typeof(MyControl), new PropertyMetadata("DEFAULT"));</code>
Liaison dans UserControl XAML :
<code class="language-xml"><UserControl ...="" x:Class="WpfTest.MyControl"> <TextBlock Text="{Binding Test, RelativeSource={RelativeSource AncestorType=UserControl}}"/> </UserControl></code>
Évitez de définir DataContext dans le constructeur UserControl :
Ne définissez jamais le DataContext dans le constructeur du UserControl. Cela empêche le UserControl d'hériter du DataContext de son 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!