Heim > Backend-Entwicklung > C++ > Warum schlägt meine XAML-Bindung an eine Abhängigkeitseigenschaft fehl, aber Code-Behind funktioniert?

Warum schlägt meine XAML-Bindung an eine Abhängigkeitseigenschaft fehl, aber Code-Behind funktioniert?

DDD
Freigeben: 2025-01-09 20:52:43
Original
539 Leute haben es durchsucht

Why Is My XAML Binding to a Dependency Property Failing, But Code-Behind Works?

XAML-Bindungsabhängigkeitseigenschaften fehlgeschlagen

Frage

Das Binden von Abhängigkeitseigenschaften schlägt in XAML fehl, funktioniert aber im CodeBehind einwandfrei.

Grund

  1. Fehler bei der Deklaration der Abhängigkeitseigenschaft: TestProperty Der Deklaration der Abhängigkeitseigenschaft fehlt der Operator nameof(), was zu einer Nichtübereinstimmung zwischen dem Eigenschaftsnamen und dem XAML-Bindungspfad führt.
  2. Bindungsquellenfehler in
  3. DataContext im Konstruktor festlegen: Durch das Festlegen der DataContext-Eigenschaft im Konstruktor von UserControl wird die Vererbung des DataContext des übergeordneten Elements verhindert, wodurch die Bindungsquelle ungültig wird.
Lösung

1. Abhängigkeitsattribute korrekt deklarieren

<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

2. Legen Sie Bindings.RelativeSource in XAML fest

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

3. Löschen Sie die DataContext-Zuweisung im Konstruktor

Entfernen Sie die Codezeile

aus dem UserControl-Konstruktor. DataContext = this;

Zusätzliche Hinweise

Legen Sie die Bindungsquelle explizit im CodeBehind fest:

<code class="language-csharp">TheControl.SetBinding(MyControl.TestProperty, new Binding
{
    Source = DataContext,
    ...
});</code>
Nach dem Login kopieren
Bindungsquelle implizit in XAML festlegen:

<code class="language-xml"><MyControl Test="{Binding MyText}"></MyControl></code>
Nach dem Login kopieren
In XAML ist die implizite Bindungsquelle standardmäßig der aktuelle DataContext und sollte vom übergeordneten Fenster korrekt festgelegt werden. Durch das Festlegen des DataContext im Konstruktor von UserControl wird der geerbte DataContext überschrieben, was dazu führt, dass die Bindung fehlschlägt. Durch das Festlegen von

in der Code-Behind-Bindung wird die Bindungsquelle explizit auf den geerbten DataContext festgelegt, wodurch sichergestellt wird, dass die Bindung gültig ist. Source = DataContext

Das obige ist der detaillierte Inhalt vonWarum schlägt meine XAML-Bindung an eine Abhängigkeitseigenschaft fehl, aber Code-Behind funktioniert?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage