有經驗的Windows程序員一定對寫代碼從一個控件上取值,以及把值存儲到控 件上很熟悉:
public Form1 : Form
{
private MyType myDataValue;
private TextBox textBoxName;
private void InitializeComponent( )
{
textBoxName.Text = myDataValue.Name;
this.textBoxName.Leave += new
System.EventHandler( this.OnLeave );
}
private void OnLeave( object sender, System.EventArgs e )
{
myDataValue.Name = textBoxName.Text;
}
}
這太 簡單了,正如你知道的,重復代碼。之所以不喜歡這樣重復代碼,就是因為應該 有更好的方法。是的,.Net框架支持數據綁定,它可以把一個對象的屬性映射到 控件的屬性上:
textBoxName.DataBindings.Add ( "Text",myDataValue, "Name" );
上面的 代碼就把textBoxName控件的“Text”屬性上綁定了MyDataValue對象 的"Name"屬性。在內部有兩個對象,綁定管理(BindingManager)和流 通管理(CurrencyManager), 實現了在控件與數據源之間的傳輸實現。你很可能 已經見過為種結構的例子,特別是在DataSet和DataGrid之間的。你也很可能已 經做過數據綁定的例子。你很可能只在表面上簡單的使用過從數據綁定上得到的 功能。你可以通過高效的數據綁定避免寫重復的代碼。
關於數據綁定的 完整處理方案可能至少要花上一本書來說明,要不就是兩本。Windows應用程序 和Web應用程序同時都支持數據綁定。比寫一個完整的數據綁定論述要強的是, 我確實想讓你記住數據綁定的核心好處。首先,使用數據綁定比你自己寫代碼要 簡單得多。其次,你應該在對文字元素通過屬性來顯示時,盡可能的使用它,它 可以很好的綁定。第三,在Windows窗體中,可以同步的對綁定在多控件上的數 據,進行相關數據源的檢測。
例如,假設只要在數據不合法時,要求將 文字顯示為紅色,你可能會寫這樣的代碼:
if ( src.TextIsInvalid )
{
textBox1.ForeColor = Color.Red;
} else
{
textBox1.ForeColor = Color.Black;
}
這很好,但只要在文字源發生改變時,你要隨時調用這段代碼。 這可能是在用戶編輯了文字,或者是在底層的數據源發生改變時。這裡有太多的 事件要處理了,而且很多地方你可能會錯過。但,使用數據綁定時,在src對象 上添加一個屬性,返回恰當的前景顏色就行了。
另一個邏輯可能是要根 據文字消息的狀態,來設置值可變化為恰當顏色的值:
private Color _clr = Color.Black;
public Color ForegroundColor
{
get
{
return _clr;
}
}
private string _txtToDisplay;
public string Text
{
get
{
return _txtToDisplay;
}
set
{
_txtToDisplay = value;
UpdateDisplayColor( IsTextValid( ) );
}
}
private void UpdateDisplayColor( bool bValid )
{
_clr = ( bValid ) ? Color.Black : Color.Red;
}