之前有不少朋友都提及到这样一个问题:为什么使用textBox1.DataBindings.Add("Text",myObject,"dataMember")绑定TextBox的Text属性后,当通过代码修改自定义类实例myObject的属性dataMember的值时,TextBox显示的值没有自动改变呢?
今天特意写写就我个人关于该问题的解决方案
要想解决问题就必须先找出造成该问题的根本,先用Reflector查看System.Windows.Forms.Binding这个类,发现他有个私有方法CheckBinding,打开来看看,一直往下找就能见到下面的这段代码了:
Type type2 = this.propInfo.PropertyType;
if (((descriptor2 != null) && (descriptor2.PropertyType == typeof(bool))) && !descriptor2.IsReadOnly)
{
this.propIsNullInfo = descriptor2;
}
EventDescriptor descriptor3 = null;
string text2 = this.propertyName + "Changed";
EventDescriptor descriptor4 = null;
string text3 = "Validating";
EventDescriptorCollection collection2 = TypeDescriptor.GetEvents(this.control);
注意字体特别大的那行,到这里应该大家都知道问题出在什么地方了吧?
没错,就是在您自定义的类里面少了名为this.propertyName + "Changed"的事件,如果以我上面那句为例,那么这里应该定义事件的名就是dataMemberChanged,所以只要在您自定义的类里面添加这个事件的定义就一切都OK了