我似乎无法解决这个问题,也找不到任何答案。
我有一个Combobox绑定到我的模型中的属性。 我只需在代码中复制并粘贴关键行:
this.m_typeCombobox.DataBindings.Add(new System.Windows.Forms.Binding("EditValue", this.m_bindingSource, "Type", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
我的模特:
public class TypeConfig : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private EnumType<eLType> m_type;
public EnumType<eLType> Type
{
get { return m_type; }
set
{
if (m_type!= value)
{
m_type= value;
var handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs("Type"));
}
}
}
我需要在combobox EditValueChanged事件上更新模型,但看起来模型稍后会更新。 EditValueChanged是更改时的最新被调用事件。
我试过这个:
void m_TypeCombobox_EditValueChanged(object sender, EventArgs e)
{
m_bindingSource.EndEdit(); //this doesn't work
//need to have the new value here
}
以下是MSDN所说的内容:
调用EndEdit方法时,所有挂起的更改都将应用于基础数据源。 除非数据源包含的对象实现IEditableObject接口,否则此方法无效。如果对象未实现IEditableObject接口,则在每次更改后立即将对数据的更改复制到基础数据源。
因此,从我的不受欢迎的角度来看,在更改组合框值时应立即更新模型。
我使用的DevExpress组合框与普通的WinForms组合框几乎相同。
我该如何解决这个问题?
答案 0 :(得分:0)
尝试绑定“Value”属性,而不是“EditValue” 我希望它可以帮到你
答案 1 :(得分:0)
要使BindingSource.EndEdit执行任何操作,您需要为BindingSource中包含的项实现System.ComponentModel.IEditableObject。
当您在绑定源上调用“EndEdit”时,它随后会对其列表中实现IEditableObject的项调用相应的IEditableObject.EndEdit()方法。
话虽如此,我遇到的一些问题是EndEdit没有被调用,例如,当用户关闭表单时,所有调用了BeginEdit的项目。