XAML-Bindung schlägt bei Abhängigkeitseigenschaften fehl
Die Datenbindung für Abhängigkeitseigenschaften hat in XAML keine Auswirkung, funktioniert aber im CodeBehind einwandfrei. Der folgende Codeausschnitt veranschaulicht das Problem:
<code class="language-xml"><UserControl ...="" x:Class="WpfTest.MyControl"> <TextBlock Text="{Binding Test}"/> </UserControl></code>
Abhängigkeitseigenschaften werden wie folgt definiert:
<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>
Im Hauptfenster funktioniert die Bindung an normale Eigenschaften einwandfrei:
<code class="language-xml"><TextBlock Text="{Binding MyText}"/></code>
Die gleiche Bindung im Benutzersteuerelement aktualisiert jedoch nicht den Text:
<code class="language-xml"><MyControl Test="{Binding MyText}" x:Name="TheControl"/></code>
Es ist erwähnenswert, dass die Bindung gut funktioniert, wenn sie im Code-Behind implementiert wird:
<code class="language-csharp">TheControl.SetBinding(MyControl.TestProperty, new Binding { Source = DataContext, Path = new PropertyPath("MyText"), Mode = BindingMode.TwoWay });</code>
Lösung:
Korrekte Deklaration der Abhängigkeitseigenschaft:
<code class="language-csharp">public static readonly DependencyProperty TestProperty = DependencyProperty.Register( nameof(Test), typeof(string), typeof(MyControl), new PropertyMetadata("DEFAULT"));</code>
Bindung in UserControl XAML:
<code class="language-xml"><UserControl ...="" x:Class="WpfTest.MyControl"> <TextBlock Text="{Binding Test, RelativeSource={RelativeSource AncestorType=UserControl}}"/> </UserControl></code>
Vermeiden Sie das Festlegen von DataContext im UserControl-Konstruktor:
Legen Sie niemals den DataContext im Konstruktor des UserControl fest. Dadurch wird verhindert, dass das UserControl den DataContext seines übergeordneten Elements erbt.
Das obige ist der detaillierte Inhalt vonWarum funktioniert meine XAML-Bindung nicht mit einer Abhängigkeitseigenschaft, sondern mit CodeBehind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!