Heim >Backend-Entwicklung >C++ >Warum schlägt meine XAML-Bindung an eine Abhängigkeitseigenschaft fehl, aber Code-Behind funktioniert?
Das Binden von Abhängigkeitseigenschaften schlägt in XAML fehl, funktioniert aber im CodeBehind einwandfrei.
TestProperty
Der Deklaration der Abhängigkeitseigenschaft fehlt der Operator nameof()
, was zu einer Nichtübereinstimmung zwischen dem Eigenschaftsnamen und dem XAML-Bindungspfad führt. 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>
2. Legen Sie Bindings.RelativeSource in XAML fest
<code class="language-xml"><TextBlock Text="{Binding Test, RelativeSource={RelativeSource AncestorType=UserControl}}"></TextBlock></code>
3. Löschen Sie die DataContext-Zuweisung im Konstruktor
Entfernen Sie die Codezeile aus dem UserControl-Konstruktor. DataContext = this;
<code class="language-csharp">TheControl.SetBinding(MyControl.TestProperty, new Binding { Source = DataContext, ... });</code>Bindungsquelle implizit in XAML festlegen:
<code class="language-xml"><MyControl Test="{Binding MyText}"></MyControl></code>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!