Welcome

首页 / 软件开发 / C# / Effective C#原则38:使用和支持数据绑定

Effective C#原则38:使用和支持数据绑定2010-12-13 博客园 Wu.Country@侠缘译有经验的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;
}