Ich habe AvalonEdit in meinem Projekt verwendet, das auf WPF und MVVM basiert. Nach dem Lesen von diesem Post habe ich die folgende Klasse erstellt:
%Vor%und verwendete das folgende XAML, um dieses Steuerelement zu verwenden:
%Vor% aber die Bindung funktioniert OneWay
und aktualisiert weder meine String-Eigenschaft noch die Validierungsregel.
Wie kann ich die Bindung an die Arbeit wie erwartet beheben TwoWay
?
WPF-Bindungen verwenden nicht Ihre DocumentText
-Eigenschaft; Stattdessen greifen sie direkt auf den zugrunde liegenden Wert der Abhängigkeitseigenschaft zu.
Ihre Methode OnTextChanged
ändert den Wert der zugrunde liegenden Abhängigkeitseigenschaft nicht. Sie müssen den Wert von base.Text
bei jeder Änderung in die Abhängigkeitseigenschaft kopieren:
Dieses Problem wäre einfacher zu sehen, wenn Sie das korrekte Muster für die Implementierung von DependencyProperty
verwendet hätten: Die DocumentText
-Eigenschaft sollte die Methoden GetValue
/ SetValue
verwenden und nicht auf einen anderen Hintergrundspeicher zugreifen.
Auch wenn GetValue und SetValue verwendet werden, können Sie die TextProperty nicht dazu bringen, das Binded zu aktualisieren, wenn sich der Text ändert, daher muss Daniels Antwort trotzdem beachtet werden.
Ich habe ein bisschen geändert, um es für den Endbenutzer intuitiver zu machen, den Text als normalen und abhängigen Modus zu benutzen:
%Vor%Ich musste prüfen, ob der gleiche Text bereits vorhanden war, um die Ausnahme des Rückgängig-Stack-Engine zu vermeiden. Auch die Leistung ist ein gutes Geschäft.
Ich habe den Code anhand der obigen Antworten mit geringfügigen Änderungen ausprobiert, da das Binden für mich beide Wege nicht funktionierte. Der Inhalt unten sollte es erlauben, auf zwei Arten zu binden.
%Vor%Tags und Links wpf c# data-binding dependency-properties avalonedit