c# - 将多个 ComboBox 绑定(bind)到单个列表 - 问题 : When I select an item, 所有组合框更改

标签 c# .net winforms combobox listbox

我正在动态创建一个 ComboBox 数组,所有 ComboBoxDataSource 是一个包含一些整数的整数列表。但是,当我在任何一个组合框中更改值 X 时,所有其他组合值都会重置为值 X。

情况是这样的:

  • 所有组合框控件都绑定(bind)到一个列表
  • 当我更改组合框的选定项时,所有其他组合框控件的选定项也会更改。

我怎样才能阻止这些行为?

最佳答案

由于您将所有组合框绑定(bind)到相同的数据源 - 单个列表 - 它们使用单​​个 BindingManagerBase .

因此,当您从其中一个组合框中选择一项时,当前的 Position 共享绑定(bind)管理器基础的更改,所有组合框都转到其共享数据源的那个位置。

要解决这个问题,您可以将它们绑定(bind)到不同的数据源:

  • 您可以将它们绑定(bind)到 yourList.ToList()或任何其他列表,例如不同的 BindingList<T> .

    combo1.DataSource = yourList.ToList();
    combo2.DataSource = yourList.ToList();
    
  • 您可以使用不同的 BindingSource为他们并将您的列表设置为DataSource绑定(bind)源

    combo1.DataSource = new BindingSource { DataSource= yourList};
    combo2.DataSource = new BindingSource { DataSource= yourList};
    

另一种选择:

  • 您可以使用不同的 BindingContext 为您的组合框。这样即使您将它们绑定(bind)到一个列表,它们也不再同步。

    combo1.BindingContext = new BindingContext();
    combo1.DataSource = yourList;
    combo2.BindingContext = new BindingContext();
    combo2.DataSource = yourList;
    

事实上,表单的所有控件都使用一个共享的BindingContext。 .当您将 2 个控件绑定(bind)到同一个数据源时,它们也使用相同的 BindingManagerBase这样,当您例如移动到下一条记录时,所有控件都会移动到下一条记录并显示来自下一条记录的绑定(bind)属性的值。这与您从组合框中看到的行为相同。同步使用相同的控件 BindingManagerBase是一种期望的行为。无论如何,有时我们不需要这样的行为。帖子分享了原因和解决方案。

关于c# - 将多个 ComboBox 绑定(bind)到单个列表 - 问题 : When I select an item, 所有组合框更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35864906/

相关文章:

c# - NLog:如何以编程方式获取特定目标的级别

c# - 为什么引用子类对象不能引用父类对象?

c# - 文件系统路径和 Directory.Exists()

wpf - 我应该将 WPF 用于将在 Windows XP 上运行的基于数据的表单应用程序吗?

c# - 更改 ToolStripButton 上的 ToolTipText 延迟时间

c# - 生成对 UTF-8 编码和解码有效的随机字符串

c# - Entity Framework Code First 中的外键名称错误

c# - 永久设置下拉列表的值

.net - 为什么在调试时 Word 会卡住?

C# Windows 窗体 : Using List<KeyValuePair> to create a Top 10 Leaderboard