出于某种原因,当从DataSource(一个简单的BindingList)添加或删除项目时,ComboBox会相应地更新,但如果我编辑这样的项目,它就不会自动更新:
myBindingList[index].Name = "NewName";
myBindingList[index].Value = newValue;
为了在编辑项目时更新它而不是创建或删除项目,我必须在更改后执行此操作:
myComboBox.DataSource = null;
myComboBox.DataSource = myBindingList;
这解决了问题,但它似乎是一个相当混乱的解决方案。对于大型列表,它可能变得很慢(我知道过早的优化),但仍然有办法强制ComboBox更新而不完全重新分配其DataSource?
感谢阅读。
答案 0 :(得分:6)
这在MSDN论坛中说明:
IBindingList接口包含ListChanged事件 如果底层数据源,像combobox挂钩的控件 分配给它实现了所述接口。你的数据源必须 使用适当的ListChangeEventArgs if引发相应的ListChanged 你添加,删除,更改等你的IBindingList实现者。 这样,每当你用来绑定你的底层资源时 组合框改变了,相应的UI控件(组合框)就是 刷新。
你说你正在使用BindingList,实际上你确实得到了组合框以反映添加或删除项目事件。我认为你应该以另一种方式更新BindingList中已经存在的项目,因为看起来像正确的BindingList事件没有被触发。
你可以调查一下,或者只是重置并重新分配DataSource,我认为不是太糟糕,你在Statefull Windows Forms应用程序中而不是在SatetLess Webforms中,所以你总是在那里有你的对象: )
答案 1 :(得分:0)
您需要可观察的集合和IPropertyChange实现: