Heim > Backend-Entwicklung > C++ > Warum funktioniert meine XAML-Bindung nicht mit einer Abhängigkeitseigenschaft, sondern mit CodeBehind?

Warum funktioniert meine XAML-Bindung nicht mit einer Abhängigkeitseigenschaft, sondern mit CodeBehind?

Patricia Arquette
Freigeben: 2025-01-09 21:11:45
Original
550 Leute haben es durchsucht

Why Doesn't My XAML Binding Work on a Dependency Property, But Works in Code-Behind?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

Im Hauptfenster funktioniert die Bindung an normale Eigenschaften einwandfrei:

<code class="language-xml"><TextBlock Text="{Binding MyText}"/></code>
Nach dem Login kopieren

Die gleiche Bindung im Benutzersteuerelement aktualisiert jedoch nicht den Text:

<code class="language-xml"><MyControl Test="{Binding MyText}" x:Name="TheControl"/></code>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

Bindung in UserControl XAML:

<code class="language-xml"><UserControl ...="" x:Class="WpfTest.MyControl">
    <TextBlock Text="{Binding Test, RelativeSource={RelativeSource AncestorType=UserControl}}"/>
</UserControl></code>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage