但是,在开发时,每次在数据绑定时都要写绑定控件和绑定数据源对应字段的名字,即"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)来实现,也是达到了目的。