C# 组合框不';当数据源更改时是否自动更新?

C# 组合框不';当数据源更改时是否自动更新?,c#,winforms,data-binding,combobox,datasource,C#,Winforms,Data Binding,Combobox,Datasource,出于某种原因,当从数据源(一个简单的绑定列表)添加或删除项时,组合框会相应地更新,但如果我像这样编辑一个项,它不会自动更新: myBindingList[index].Name = "NewName"; myBindingList[index].Value = newValue; 为了使其在编辑项目时更新,而不是创建或删除项目,我必须在进行更改后执行以下操作: myComboBox.DataSource = null; myComboBox.DataSource = myBindingList

出于某种原因,当从数据源(一个简单的绑定列表)添加或删除项时,组合框会相应地更新,但如果我像这样编辑一个项,它不会自动更新:

myBindingList[index].Name = "NewName";
myBindingList[index].Value = newValue;
为了使其在编辑项目时更新,而不是创建或删除项目,我必须在进行更改后执行以下操作:

myComboBox.DataSource = null;
myComboBox.DataSource = myBindingList;
这解决了问题,但似乎是一个相当混乱的解决方案。同样对于大列表,它可能会变得很慢(我知道过早优化),但是仍然有办法在不完全重新分配数据源的情况下强制组合框更新吗


感谢阅读。

这在MSDN论坛中有说明:

IBindingList接口包含ListChanged事件,其中 控件(如combobox)连接到基础数据源 分配给它实现所述接口。您的数据源必须 如果需要,请使用适当的ListChangeEventArgs引发相应的ListChanged 添加、删除、更改IBindingList实现者时。 这样,每当您用来绑定到 combobox被更改,相应的UI控件(combobox)被 刷新

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


您可以对此进行调查,也可以简单地使用重置并重新分配数据源,我不认为这太糟糕,您使用的是状态完整的Windows窗体应用程序,而不是无状态的Web窗体,因此您的对象始终存在:)

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


这家伙说的是Windows窗体,而不是WPF。