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

Kyl*_*ney 8 c# data-binding combobox datasource winforms

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

myBindingList[index].Name = "NewName";
myBindingList[index].Value = newValue;
Run Code Online (Sandbox Code Playgroud)

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

myComboBox.DataSource = null;
myComboBox.DataSource = myBindingList;
Run Code Online (Sandbox Code Playgroud)

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

谢谢阅读.

Dav*_*ras 6

这在MSDN论坛中说明:

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

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

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