反序列化了一个对象,this.element,然后把这个对象绑定到NumericUpDown的Value属性上,具体过程如下:
第一步,反序列化一个对象到this.element;
1 private void btnOpen_Click(object sender, EventArgs e) 2 { 3 OpenFileDialog ofd = new OpenFileDialog(); 4 ofd.Filter = "文本文件(*.txt)|*.txt|xml文件(*.xml)|*.xml|所有文件(*.*)|*.*"; 5 if (ofd.ShowDialog() == DialogResult.OK) 6 { 7 this.element = XmlHelper.DeserializeFromFile<MetalElement>(ofd.FileName); 8 } 9 this.BindData(); 10 }
第二步,绑定属性
1 private void BindData() 2 { 3 4 this.numericUpDownAl.DataBindings.Clear(); 5 this.numericUpDownAl.DataBindings.Add("Value", this.element, "Al", true, DataSourceUpdateMode.OnPropertyChanged); 6 7 this.numericUpDownC.DataBindings.Clear(); 8 this.numericUpDownC.DataBindings.Add("Value", element, "C", true, DataSourceUpdateMode.OnPropertyChanged); 9 }
第三步,为numbericUpDown增加一个ValueChanged事件,该事件使用element执行业务计算。
1 this.numericUpDownAl.ValueChanged += new System.EventHandler(this.OnCalculate); 2 3 private void OnCalculate(object sender, EventArgs e) 4 { 5 YuHACalculator yuC = new YuHACalculator(this.element); 6 this.RunCalculate(); 7 }
现在在窗体上更改numericUpDown数据时,会发现numericUpDown的值已经改变,但是执行OnCalculate()时this.element.Al什么的,却没有改变,直到再次更改numericUpDown时this.element.Al值变成上次触发的那个值。也就是说,控件的值更新了,但绑定的实体对象的值总是会延迟更新。我在想是不是这样的,当更改numericUpDown的控件值时,先出发ValueChanged事件,然后再触发绑定的数据更新,要不然怎么老是会延迟更新呢?
望高人讲解,并能做到一致的更新。
我刚刚试了一下,我这里是可以正常绑定的,
我不知道的是你为什么在你的第二步里面绑定了两次.?是测试用的么.?
如果不是测试用的话.应该是你先绑定了 al属性,然后又清除了,然后再重新绑定的C属性...
第二步绑定的是两个不同的numericUpDown,实际程序中绑定了16个numericUpDown,这里只写了两个。
this.numericUpDownC.DataBindings.Clear();
是为了防止重复绑定。 先清除,再绑定。不是绑定完又清除了。
@Zigzag: 不好意思,没看清楚,但是我这里确实是可以正常绑定的,点击按钮就可以显示新的值了,