2012-01-19 104 views
6

試圖將字符串綁定到RichTextBox.Text屬性,以便當字符串值更改時,該更改會反映在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

你綁定硬編碼字符串的目的是什麼?你不想在綁定方面走相反的方向..你真正想要實現什麼?你想從某人輸入的某些動態數據中像編輯框那樣綁定到ChatLog,或者你是否真的試圖將數據附加到ChatLog ..? – 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不喜歡這個名字「屬性」的屬性名稱。嘗試將其更改爲「Property」以外的其他內容。

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

是的,這是有效的,我確實看到了一些關於該界面的內容,但希望它不會被需要。 – user983110

0

爲什麼不只是設置字符串變量的屬性,並通過屬性來處理字符總是?其簡單的二傳手下做到:rtxt_chatLog.Text = test;

編輯:從OP: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種其他方法來解決我的問題。我可以讓彈出窗口暴露它的RichTextBox並將其註冊到我的主窗體中,以便它將由主窗體中的代碼填充。或者,我可以創建自己的事件,這將允許我在訂戶中創建更靈活的事件處理程序,而不是使用預定義的PropertyChangeEventHandler。 – user983110

相關問題