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 :
<UserControl ...="" x:Class="WpfTest.MyControl"> <TextBlock Text="{Binding Test}"/> </UserControl>
Les propriétés de dépendance sont définies comme suit :
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); } }
Dans la fenêtre principale, la liaison aux propriétés normales fonctionne parfaitement :
<TextBlock Text="{Binding MyText}"/>
Cependant, la même liaison dans le contrôle utilisateur ne met pas à jour le texte :
<MyControl Test="{Binding MyText}" x:Name="TheControl"/>
Il convient de noter que la liaison fonctionne correctement lorsqu'elle est implémentée dans le code-behind :
TheControl.SetBinding(MyControl.TestProperty, new Binding { Source = DataContext, Path = new PropertyPath("MyText"), Mode = BindingMode.TwoWay });
Solution :
Déclaration correcte des propriétés de dépendance :
public static readonly DependencyProperty TestProperty = DependencyProperty.Register( nameof(Test), typeof(string), typeof(MyControl), new PropertyMetadata("DEFAULT"));
Liaison dans UserControl XAML :
<UserControl ...="" x:Class="WpfTest.MyControl"> <TextBlock Text="{Binding Test, RelativeSource={RelativeSource AncestorType=UserControl}}"/> </UserControl>
É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!