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>
<code class="language-xml"><MyControl Test="{Binding MyText}"></MyControl></code>
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!