Zwei-Wege-Bindung in AvalonEdit funktioniert nicht

8

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 ?

    
Naser Asadi 13.02.2013, 14:01
quelle

3 Antworten

6

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:

%Vor%

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.

    
Daniel 13.02.2013, 21:27
quelle
4

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.

    
Lucas Locatelli 09.04.2014 15:41
quelle
1

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%     
Lesław M.P. 16.01.2015 09:58
quelle