C#利用Lambda和Expression实现数据的动态绑定
作者:网络转载 发布时间:[ 2013/9/2 10:23:15 ] 推荐标签:
但是,在开发时,每次在数据绑定时都要写绑定控件和绑定数据源对应字段的名字,即"Text"和"statusInfo_pro",有时稍加不注意会写错,这样会导致绑定数据出错,或者绑定失败。那有没有什么办法可以改善呢?
如果能够在数据绑定时这样写
private void binding()
{
textbox1.DataBindings.Add(textbox1.Text,helper,helper.statusInfo_pro,false,DataSourceUpdateMode.OnPropertyChanged);
}
那么不会出现写错的问题。因为Text是textbox1的属性,statusInfo_pro是helper的属性。
基于这种想法,终采用Lambda和Expression实现。其实现代码如下:
private void binding()
{
textbox1.DataBindings.Add(fetchPropertyName(() =>textbox1.Text),
helper,
fetchPropertyName(() => helper.statusInfo_pro),
false,
DataSourceUpdateMode.OnPropertyChanged
);
}
#region fetchPropertyName Function
public static string fetchPropertyName<T>(Expression<Func<T>> property)
{
MemberExpression memberExpression = property.Body as MemberExpression;
if (memberExpression == null)
{
return null;
}
return memberExpression.Member.Name;
}
#endregion
其中fetchPropertyName中的参数Expression<Func<T>> property在调用时使用了lambda表达式来传递参数。
虽然没有达到预想的直接写textbox1.Text,但换用了fetchPropertyName(() =>textbox1.Text)来实现,也是达到了目的。

sales@spasvo.com