我有一个实体,例如:
public class Entity
{
public Enum1 FirstEnum { get; set; }
public Enum2 SecondEnum { get; set; }
}
此实体绑定到BindingSource
上,后者依次绑定了表单上的控件;例如:
this.cboSecondEnum.DataBindings.Add(new Binding("SelectedValue", this.bindingSource, "SecondEnum", true, DataSourceUpdateMode.OnPropertyChanged, Enum2.Default));
为了在用户更改ComboBox
中的值时更改一些细节,我有:
private void cboSecondEnum_SelectedValueChanged(object sender, EventArgs e)
{
if (cboSecondEnum.SelectedValue == null)
return;
var item = (Enum2)cboSecondEnum.SelectedValue;
//Do something...
}
到目前为止,当用户以表格形式输入数据并将实体正确保存在数据库中时,上述方法可以正常工作。
但是,问题出在加载相同的实体时。设置绑定源后,如下所示:
this.bindingSource.DataSource = myEntity;
在绑定控件期间的某个时刻引发了SelectedValueChange
事件,而SelectedValue
仍未基于实体的属性进行设置。这仅发生在ComboBox
控件上。其他数据绑定控件将按预期工作。
当用户更改某些其他控件(并且数据源通过绑定源自动更新)时,所有控件都将刷新,此时ComboBox
值反映了实体属性的实际值
预期的行为是,在设置ComboBox
的{{1}}属性时正确设置了DataSource
值。
我在这里错过了什么吗?这是WinForms项目中数据绑定的问题吗?