假设您正在执行以下操作
List<string> myitems = new List<string>
{
"Item 1",
"Item 2",
"Item 3"
};
ComboBox box = new ComboBox();
box.DataSource = myitems;
ComboBox box2 = new ComboBox();
box2.DataSource = myitems
因此,现在我们有2个组合框绑定(bind)到该数组,并且一切正常。但是,当您更改一个组合框的值时,会将两个组合框都更改为刚选择的组合框。
现在,我知道数组总是通过引用传递的(了解到当我学习C:D时),但是为什么组合框会一起改变呢?我不相信组合框控件根本不会修改集合。
解决方法是,不要这样做会达到预期/期望的功能
ComboBox box = new ComboBox();
box.DataSource = myitems.ToArray();
最佳答案
这与在dotnet框架(尤其是BindingContext
)中如何设置数据绑定(bind)有关。从较高的角度讲,这意味着如果您没有另行指定,每个表单和表单的所有控件都共享相同的BindingContext
。设置DataSource
属性时,ComboBox
将使用BindingContext
获取包装列表的ConcurrenyMangager
。 ConcurrenyManager
跟踪诸如列表中当前所选位置之类的内容。
当您设置第二个DataSource
的ComboBox
时,它将使用相同的BindingContext
(形式),这将产生与上述用于设置数据绑定(bind)的相同ConcurrencyManager
的引用。
要获得更详细的说明,请参见BindingContext。
关于c# - WinForms ComboBox数据绑定(bind)陷阱,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/482/