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

时间:2011-09-11 17:07:13

标签: c# winforms data-binding combobox datasource

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

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

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

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

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

感谢阅读。

2 个答案:

答案 0 :(得分:6)

这在MSDN论坛中说明:

  

IBindingList接口包含ListChanged事件   如果底层数据源,像combobox挂钩的控件   分配给它实现了所述接口。你的数据源必须   使用适当的ListChangeEventArgs if引发相应的ListChanged   你添加,删除,更改等你的IBindingList实现者。   这样,每当你用来绑定你的底层资源时   组合框改变了,相应的UI控件(组合框)就是   刷新。

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

你可以调查一下,或者只是重置并重新分配DataSource,我认为不是太糟糕,你在Statefull Windows Forms应用程序中而不是在SatetLess Webforms中,所以你总是在那里有你的对象: )

答案 1 :(得分:0)

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

ComboBox bound to a ObservableCollection does not update