2015-11-04 9 views
9

में बाइंडेबल तो मैं अपने .net 4.5 प्रोजेक्ट में David Veeneman's Bindable WPF RichTextBox का उपयोग करने का प्रयास कर रहा हूं। नियंत्रण जोड़ने के बाद और मेरे कोड में ValueConverter मैंने देखा कि केवल public object Convert() ट्रिगर किया जाएगा लेकिन public object ConvertBack() नहीं।WPF Richtextbox .net 4.5

इस परियोजना को टिप्पणियों को पढ़ने के बाद मैंने नियंत्रण स्रोत कोड के निम्नलिखित भागों को बदल दिया।

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; 
} 

और इस घटना हैंडलर:

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

    // Changed: 
    Document = TextBox.Document; 
} 

अब ValueConverter के दोनों विधि ठीक काम किया लेकिन private void OnNormalTextClick(object sender, RoutedEventArgs e) तरह की घटनाओं रनटाइम पर एक FatalExecutionEngineError कारण बनता है।

तो मुझे आश्चर्य है कि क्या बड़े बदलाव WPF 3.5 से 4.5 के रूप में हैं?

या किसी के पास इस बारे में काम करने का विचार है?


अद्यतन

XAML

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

क्या आप दिखा सकते हैं कि आप बाध्यकारी कैसे बनाते हैं? –

+0

क्या आपने .NET Framework 4.6 स्थापित किया है (भले ही आप 4.5 को लक्षित करते हैं)? क्या आप रिलीज या डीबग में कोशिश कर रहे हैं? इसके अलावा, मैं डेमो और आपके परिवर्तनों के साथ बॉक्स द्वारा पुन: पेश नहीं कर सकता, क्या आपके पास एक पूर्ण रेपो कोड है? –

+0

@SimonMourier मेरी वर्तमान विकास मशीन पर .NET 4.5.1 स्थापित है। लक्ष्य अभी भी 4.5 – Smartis

उत्तर

0

में बाइंडिंग मैं लक्ष्य ढांचे 4.0 और 4.5 के साथ VS2015 में डेमो आप linked here भाग गया। जब मैं दो तरह के डेटा बाध्यकारी लेता हूं तो यह अपडेट नहीं होगा।

अपने आरटीबी में जोड़ें। दो तरह से डेटा बाइंडिंग और एक नाम:

// Changed: 
Document = TextBox.Document; 

उपयोग डेटा को अद्यतन करने के लिए एक ईवेंट हैंडलर:

Mode=TwoWay 
x:Name="EditBox" 

मैं नहीं बल्कि पाठ अपने आप को यहां नहीं बदल प्रबंध से लगता है कि यह निकाल दें।

अपने ईवेंट हैंडलर कि आपके अपडेट प्रबंध कर रहा है (मैं एक बटन पर क्लिक करें और इस अद्यतन प्रबंधन करने की अनुमति संभालने हूँ में

फिर

this.EditBox.UpdateDocumentBindings(); 

एक्स:। नाम विशेषता मूल्यवान है

यह। सभी स्रोत कोड में पाया जाता है।

आप कैसे अपनी परियोजना की व्यवस्था है मैं और अधिक विस्तार प्रदान कर सकते हैं। लेकिन शुरुआत के लिए, मैं यह करने के बारे में अधिक स्पष्ट हो सकता है। प्रदान की उदाहरण के लिए और अधिक बारीकी से चिपका।