經(jīng)常寫(xiě)用一個(gè)TextBox顯示某個(gè)對(duì)象,然后編輯之后再保存的程序。以前都是在TextBox_TextChanged事件中修改對(duì)象的值,或者保存的時(shí)候再讀取TextBox.Text屬性保存對(duì)象的值。這樣比較麻煩,而且經(jīng)常容易出錯(cuò)。后來(lái)了解了C#的數(shù)據(jù)綁定,發(fā)現(xiàn)能夠很好的解決這個(gè)問(wèn)題。
1. 首先C#的TextBox本身就帶數(shù)據(jù)綁定功能。
下面的代碼就是把_myData對(duì)象的"TheValue"屬性綁定到textBox1和textBox2的"Text"屬性。最后一個(gè)參數(shù)不同:
1)其中DataSourceUpdateMode.OnPropertyChanged表示textBox1.Text發(fā)生變化,_myData.TheValue也變化,叫雙向綁定。
2)DataSourceUpdateMode.Never表示Text1.Text變化不影響_myData.TheValue的值,是單向綁定。
1
2
3
4
5
6
|
private void Form1_Load( object sender, EventArgs e) { _myData = new MyData(); textBox1.DataBindings.Add( "Text" , _myData, "TheValue" , false , DataSourceUpdateMode.OnPropertyChanged); textBox2.DataBindings.Add( "Text" , _myData, "TheValue" , false , DataSourceUpdateMode.Never); } |
2.也許有人留意到了,為什么上面的叫"雙向綁定"呢?如果_myData.TheValue的值變化了,兩個(gè)文本框的Text會(huì)變化嗎?不錯(cuò),僅在 textBox上數(shù)據(jù)綁定還不叫雙向綁定,對(duì)象數(shù)據(jù)變化要通知綁定該對(duì)象的控件才行。這樣就需要對(duì)象實(shí)現(xiàn)INotifyPropertyChanged接 口。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
public class MyData : INotifyPropertyChanged { private string _theValue = string .Empty; public string TheValue { get { return _theValue; } set { if ( string .IsNullOrEmpty(value) && value == _theValue) return ; _theValue = value; NotifyPropertyChanged(() => TheValue); } } public event PropertyChangedEventHandler PropertyChanged; public void NotifyPropertyChanged<T>(Expression<Func<T>> property) { if (PropertyChanged == null ) return ; var memberExpression = property.Body as MemberExpression; if (memberExpression == null ) return ; PropertyChanged.Invoke( this , new PropertyChangedEventArgs(memberExpression.Member.Name)); } } |
3.好了,數(shù)據(jù)綁定完成了,看看效果吧。textBox1.Text變化—>_myData.TheValue變化—>textBox2.Text變化。反過(guò)來(lái)textBox2.Text變化就不是這樣了,因?yàn)閠extBox2使用的單向綁定。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。
原文鏈接:https://www.cnblogs.com/zhaoshujie/p/9678899.html