DataSource更改时,ComboBox不会自动更新?

出于某种原因,当从DataSource(一个简单的BindingList)添加或删除项目时,ComboBox会相应地更新,但如果我编辑这样的项目,它就不会自动更新:

myBindingList[index].Name = "NewName"; myBindingList[index].Value = newValue; 

为了在编辑项目时更新它而不是创建或删除项目,我必须在更改后执行此操作:

 myComboBox.DataSource = null; myComboBox.DataSource = myBindingList; 

这解决了问题,但它似乎是一个相当混乱的解决方案。 对于大型列表,它可能会变慢(我知道过早的优化),但仍然有办法强制ComboBox更新而不完全重新分配其DataSource?

谢谢阅读。

这在MSDN论坛中说明:

IBindingList接口包含ListChanged事件,其中如果分配给它的基础数据源实现所述接口,则combobox之类的控件将挂钩。 如果你添加,删除,更改等你的IBindingList实现者,你的数据源必须用适当的ListChangeEventArgs引发相应的ListChanged。 这样,只要更改了用于绑定到combobox的基础源,就会刷新相应的UI控件(combobox)。

你说你正在使用BindingList,实际上你确实得到了combobox以反映添加或删除项目事件。 我认为您应该以另一种方式更新BindingList中已有的项目,因为看起来像正确的BindingList事件没有被触发。

你可以调查那个或只是生活重置并重新分配DataSource,我不认为太糟糕,你是在Statefull Windows窗体应用程序而不是在SatetLess Webforms中所以你一直有你的对象:)

您需要可观察的集合和IPropertyChange实现:

绑定到ObservableCollection的ComboBox不会更新