2015-11-04 18 views
9

Also versuche ich David Veeneman's Bindable WPF RichTextBox hier in meinem .net 4.5 Projekt zu verwenden. Nach dem Hinzufügen der Kontrolle und der ValueConverter in meinem Code bemerkte ich nur die public object Convert() wird ausgelöst, aber die public object ConvertBack() nicht.WPF Richtextbox Bindbar in .net

Nach dem Lesen der Kommentare zu diesem Projekt habe ich folgende Teile des Quellcodes der Steuerung geändert.

private static void OnDocumentChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
{ 
    var thisControl = (EcoRichTextBox)d; 
    if (thisControl.m_InternalUpdatePending > 0) 
    { 
     thisControl.m_InternalUpdatePending--; 
     return; 
    } 
    // Changed: 
    try 
    { 
     thisControl.TextBox.Document = (e.NewValue == null) ? new FlowDocument() : (FlowDocument)e.NewValue; 
    } 
    catch { } 
    thisControl.m_TextHasChanged = false; 
} 

Und dieser Event-Handler:

private void OnTextChanged(object sender, TextChangedEventArgs e) 
{ 
    // Set the TextChanged flag 
    m_TextHasChanged = true; 

    // Changed: 
    Document = TextBox.Document; 
} 

Nun ist die die beiden Verfahren des ValueConverter hat gut funktioniert, aber Veranstaltungen wie private void OnNormalTextClick(object sender, RoutedEventArgs e) verursacht eine FatalExecutionEngineError auf Runtime.

Also frage ich mich, ob es große Änderungen von WPF 3.5 bis 4.5 gibt?

Oder hat jemand eine Idee, um dies zu umgehen?


aktualisieren

in XAML Bindung

<uc:FsRichTextBox Margin="5" 
    Document="{Binding Path=Ereignis.Bericht, 
    Converter={StaticResource flowDocumentConverter}, 
    UpdateSourceTrigger=PropertyChanged, NotifyOnSourceUpdated=True}" /> 
+0

können Sie bitte einfach zeigen, wie Sie die Bindung machen? –

+0

Haben Sie .NET Framework 4.6 installiert (auch wenn Sie 4.5 als Ziel verwenden)? Versuchen Sie in Release oder Debug? Außerdem kann ich mit der Demo und Ihren Änderungen nicht per Box reproduzieren, haben Sie einen vollen Reprodiercode? –

+0

@SimonMourier Bei meiner aktuellen Entwicklungsmaschine ist .NET 4.5.1 installiert. Ziel noch 4.5 – Smartis

Antwort

0

lief ich die Demo Sie linked here in VS2015 mit Zielframework 4.0 und 4.5. Es wird nicht aktualisiert, wenn ich die Zwei-Wege-Datenbindung herausnehme.

Fügen Sie zu Ihrem RTB hinzu. Zwei-Wege-Datenbindung und einen Namen:

Mode=TwoWay 
x:Name="EditBox" 

Ich denke eher, als die Verwaltung der Text selbst ändern, entfernen Sie dies:

// Changed: 
Document = TextBox.Document; 

Verwenden Sie einen Ereignishandler die Daten zu aktualisieren.

Dann in Ihrem Event-Handler, die Ihre Updates verwaltet (I eine Schaltfläche klicken gehe davon aus und lassen Sie dies das Update verwalten

this.EditBox.UpdateDocumentBindings(); 

Der x:. Attribut name ist wertvoll

Dies. ist alles im Quellcode gefunden

Wenn Sie mehr Klarheit darüber haben, wie Ihr Projekt organisiert ist, kann ich mehr Details bereitstellen, aber für den Anfang, würde ich dies tun.Klicken Sie näher auf das Beispiel zur Verfügung gestellt.