La liaison des propriétés de dépendance échoue en XAML mais fonctionne correctement en code-behind.
TestProperty
La déclaration de la propriété de dépendance ne contient pas l'opérateur nameof()
, ce qui entraîne une incompatibilité entre le nom de la propriété et le chemin de liaison XAML. 1. Déclarer correctement les attributs de dépendance
<code class="language-csharp">public static readonly DependencyProperty TestProperty = DependencyProperty.Register( nameof(Test), typeof(string), typeof(MyControl), new PropertyMetadata("DEFAULT"));</code>
2. Définir Bindings.RelativeSource en XAML
<code class="language-xml"><TextBlock Text="{Binding Test, RelativeSource={RelativeSource AncestorType=UserControl}}"></TextBlock></code>
3. Supprimez l'affectation DataContext dans le constructeur
Supprimez la ligne de code DataContext = this;
du constructeur UserControl.
Définissez explicitement la source de liaison dans le code-behind :
<code class="language-csharp">TheControl.SetBinding(MyControl.TestProperty, new Binding { Source = DataContext, ... });</code>
Définir implicitement la source de liaison dans XAML :
<code class="language-xml"><MyControl Test="{Binding MyText}"></MyControl></code>
En XAML, la source de liaison implicite est par défaut le DataContext actuel et doit être définie correctement par la fenêtre parent. La définition du DataContext dans le constructeur de UserControl écrasera le DataContext hérité, provoquant l'échec de la liaison. En définissant Source = DataContext
dans la liaison code-behind, la source de liaison est explicitement définie sur le DataContext hérité, garantissant ainsi que la liaison est valide.
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!