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不会更新