【发布时间】:2015-10-01 22:22:44
【问题描述】:
我有一个绑定到 ComboBox 的数据对象,当该 ComboBox 中的选定值发生更改时,我想更新数据对象,然后刷新对象绑定到的数据网格。
我遇到的问题是,据我所知,我附加的事件处理程序在数据对象更新之前触发,因此当我的数据网格刷新时它仍然包含旧的 ComboBox 值。
这是我的 ComboBox 控件初始化:
cmbPaymentType.DataSource = _paymentTypes
cmbPaymentType.DisplayMember = "PaymentTypeName"
cmbPaymentType.DataBindings.Add("SelectedItem", _data, "PaymentType", False, DataSourceUpdateMode.OnPropertyChanged)
cmbPaymentType.Refresh()
AddHandler cmbPaymentType.DropDownClosed, AddressOf _data.NotifyDataChanged
当 NotifyDataChanged 被触发时,使用我的数据对象_data 的数据网格被刷新,但是 PaymentType 的值没有被更新。如果我之后从其他地方触发 NotifyDataChanged,数据网格会更新为选定的组合框值,这表明数据对象绑定有效,它只是在我的应用程序流程中绑定得太晚了。
在数据绑定更新后如何触发事件?
谢谢!
编辑:数据对象_data 是一个自动生成的实体框架类,其中附有我编写的部分类。如果我要使用INotifyPropertyChanged 接口,我不知道如何覆盖自动生成的属性以正确实现它。
@Fabio 下面的解决方案通过在组合框选择更改时手动更新数据绑定解决了我的问题,这意味着我的事件处理可以在之后进行,并且数据对象将在数据网格刷新之前更新。我稍微调整了他的函数,以便在任何控件上使用第一个数据绑定:
Private Sub bindingUpdate(sender As Object, e As EventArgs)
DirectCast(sender, Control).DataBindings(0).WriteValue()
_data.NotifyDataChanged(sender, e)
End Sub
【问题讨论】:
-
SelectedIndexChanged、Leave 等各种事件都具有相同的效果;它们在绑定更新之前触发