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
public static readonly DependencyProperty TestProperty = DependencyProperty.Register( nameof(Test), typeof(string), typeof(MyControl), new PropertyMetadata("DEFAULT"));
2. Legen Sie Bindings.RelativeSource in XAML fest
<TextBlock Text="{Binding Test, RelativeSource={RelativeSource AncestorType=UserControl}}"></TextBlock>
3. Löschen Sie die DataContext-Zuweisung im Konstruktor
Entfernen Sie die Codezeile aus dem UserControl-Konstruktor. DataContext = this;
TheControl.SetBinding(MyControl.TestProperty, new Binding { Source = DataContext, ... });
<MyControl Test="{Binding MyText}"></MyControl>
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!