2012-01-19 11 views
6

एक RichTextBox पर स्ट्रिंग को बांधने का प्रयास कर रहा है। अतिरिक्त गुण ताकि जब स्ट्रिंग मान बदलता है, वह परिवर्तन RichTextBox में दिखाई देता है। अब तक मैं असफल हूं।डाटाबेसिंग RichTextBox.Text को स्ट्रिंग

string test = "Test"; 
rtxt_chatLog.DataBindings.Add("Text",test,null); 
test = "a"; 

यह rtxt_chatLog में "टेस्ट" दिखाता है, लेकिन "ए" नहीं।

यहां तक ​​कि rtxt_chatLog.Refresh() जोड़ने की कोशिश की; लेकिन इससे कोई फर्क नहीं पड़ता है।

अद्यतन 1: यह या तो काम नहीं करता:

public class Test 
{ 
    public string Property { get; set; } 
} 

Test t = new Test(); 
t.Property = "test"; 
rtxt_chatLog.DataBindings.Add("Text", t, "Property"); 
t.Property = "a"; 

मैं समझ नहीं कर रहा हूँ डेटा सही ढंग से बाध्यकारी?

+0

हार्डकोडेड स्ट्रिंग को बाध्य करने का क्या उद्देश्य है .. क्या आप बाध्यकारी के संबंध में विपरीत दिशा नहीं जाना चाहते हैं .. आप वास्तव में क्या हासिल करने की कोशिश कर रहे हैं ?? क्या आप चैटलॉग से जुड़ने के लिए किसी एडिटबॉक्स की तरह कुछ डायनामिक डेटा चाहते हैं या क्या आप वास्तव में चैटलॉग में डेटा जोड़ने की कोशिश कर रहे हैं ..? – MethodMan

+0

आप संदर्भ से नहीं, मूल्य से बंधे हैं। इसका मतलब है कि केवल 'test' ("test") का वर्तमान मान पारित किया गया है और परिवर्तनीय' test' में कोई भी परिवर्तन टेक्स्ट बॉक्स को प्रभावित नहीं करेगा। –

+0

क्या हासिल करने की कोशिश कर रहा है? खैर, मैं एक खिड़की (दृश्यों के पीछे) में स्ट्रिंग में संदेशों का लॉग रखना चाहता हूं और फिर, उपयोगकर्ता के अनुरोध पर, एक और विंडो पॉप अप करें जो वास्तविक समय में मूल रूप से स्ट्रिंग की सामग्री सूचीबद्ध करेगी।मैं खिड़की को अद्यतन करना चाहता हूं, क्योंकि मूल रूप में स्ट्रिंग को अद्यतन किया गया है। कोड स्निपेट बाइंडिंग का परीक्षण करने का मेरा तरीका है। – user983110

उत्तर

4

String वर्ग INotifyPropertyChanged को लागू नहीं करता, इसलिए कोई घटनाओं बाध्यकारी स्रोत RichTextBox है कि कुछ बदल बताने के लिए देखते हैं।

INotifyPropertyChanged कार्यान्वित के साथ अपने कक्षा को अपडेट करने का प्रयास करें:

public class Test : INotifyPropertyChanged { 
    public event PropertyChangedEventHandler PropertyChanged; 

    private string _PropertyText = string.Empty; 

    public string PropertyText { 
    get { return _PropertyText; } 
    set { 
     _PropertyText = value; 
     OnPropertyChanged("PropertyText"); 
    } 
    } 

    private void OnPropertyChanged(string propertyName) { 
    if (PropertyChanged != null) 
     PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 

}

इसके अलावा, यह DataBinding की तरह दिखता है एक संपत्ति के नाम के लिए नाम "संपत्ति" पसंद नहीं है। इसे "संपत्ति" के अलावा किसी अन्य चीज़ में बदलने का प्रयास करें।

rtxt_chatLog.DataBindings.Add("Text", t, "PropertyText"); 
+0

हाँ, यह काम करता है, मैंने उस इंटरफ़ेस के बारे में कुछ देखा लेकिन उम्मीद कर रहा था कि इसकी आवश्यकता नहीं होगी। – user983110

0

क्यों स्ट्रिंग चर के लिए एक संपत्ति सेट न करें और हमेशा संपत्ति के माध्यम से स्ट्रिंग को संभालें? इसके सेटर के तहत सरल करने के लिए: rtxt_chatLog.Text = test;

संपादित करें: ओपी से: Well, I want to keep a log of messages in a string in one window (behind the scenes) and then, at user's request, pop up another window that will list the contents of the string from the parent form in real time

आप केवल उपयोगकर्ता के अनुरोध पर एक स्ट्रिंग की सामग्री को सूचीबद्ध करना चाहते हैं, तो आप इन सभी का कुछ भी नहीं की जरूरत है। बस उस घटना के तहत उपयोगकर्ता के अनुरोध को संभालने और rtxt_chatLog.Text = test करने की आवश्यकता है (शायद कुछ ईवेंटशेलर)।

public string Test 
{ 
    set 
    { 
     test = value; 
     rtxt_chatLog.Text = test; 
    } 
    get { return test; } 
} 

कुंजी यहाँ से बाहर के माध्यम से ही संपत्ति का उपयोग करने के चर test के मूल्यों को निर्धारित करने के लिए है: लेकिन अपने स्ट्रिंग आप कुछ सरल कर सकते हैं के लिए हर नए मूल्य की जगह ले करने के लिए यदि आप अपने richtextbox की जरूरत है। उदाहरण के लिए, अपने कोड में न

test = "sdf"; 

Test = "sdf"; 

सरल करते हैं।

+0

मैंने जो लिखा है उससे उलझन में हूं और इसका पालन करने में असमर्थ हूं। कौन सी संपत्ति स्ट्रिंग इत्यादि के साथ जाती है, लेकिन यदि आप मेरे प्रश्न पर मेरी पहली टिप्पणी देखते हैं, तो आप देखेंगे कि मुझे इसके लिए क्या चाहिए और आपके द्वारा दिखाए गए कोड नमूने ऐसा लगता है कि यह चाल नहीं करेगा। – user983110

+0

काफी नहीं, जब तक हम शुरू करने के लिए बहुत अलग सोच नहीं रहे हैं। rtxt_chatLog मेरे मुख्य रूप का हिस्सा है और इसका अपना अलग कार्य है, लेकिन जिसे मैंने अस्थायी रूप से बाध्यकारी परीक्षण के लिए उपयोग किया था। उपयोगकर्ता के अनुरोध पर, मैं अपने स्वयं के RichTextBox के साथ एक विंडो पॉप-अप करना चाहता हूं जो उस स्ट्रिंग की सामग्री दिखाएगा जो मैं ऐप के पूरे जीवन में जोड़ रहा हूं। इसलिए, जिस तरह से मैं सोच रहा हूं, दूसरा RichTextBox अस्तित्व में नहीं आता है जब तक कि उपयोगकर्ता संदेश देखने का विकल्प नहीं चुनता, जो अन्यथा एप्लिकेशन प्रारंभ से पृष्ठभूमि में जमा हो रहा है। – user983110

+0

यह देखते हुए कि मुझे एक अलग ऑब्जेक्ट बनाना है जो INotifyChangeProperty को लागू करता है मैंने देखा कि वास्तव में मेरी समस्या को हल करने के लिए 2 अन्य दृष्टिकोण नहीं हैं। मैं पॉप-अप विंडो को अपने रिचटेक्स्टबॉक्स का खुलासा कर सकता हूं और इसे मेरे मुख्य रूप में पंजीकृत कर सकता हूं ताकि यह मुख्य रूप से कोड द्वारा पॉप्युलेट हो सके। या, मैं अपना खुद का कार्यक्रम बना सकता हूं जो मुझे पूर्वनिर्धारित PropertyChangeEventHandler का उपयोग करने के विरोध में ग्राहकों में अधिक लचीला ईवेंट हैंडलर बनाने की अनुमति देगा। – user983110

संबंधित मुद्दे