假设您正在执行以下操作

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获取包装列表的ConcurrenyMangagerConcurrenyManager跟踪诸如列表中当前所选位置之类的内容。

当您设置第二个DataSourceComboBox时,它将使用相同的BindingContext(形式),这将产生与上述用于设置数据绑定(bind)的相同ConcurrencyManager的引用。

要获得更详细的说明,请参见BindingContext

关于c# - WinForms ComboBox数据绑定(bind)陷阱,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/482/

10-12 07:40