【问题标题】:C# binding to multiple controls - > selection changes at every controlC# 绑定到多个控件 - > 每个控件的选择更改
【发布时间】:2017-02-18 11:30:08
【问题描述】:

我在绑定到多个控件时遇到问题。例如,我有不同的控件:1 个列表框、2 个组合框、1 个 datagridview,它们都绑定到同一个列表或 iobservablecollection(除了 datagridview 显示相同的属性)。一切正常。但是,如果我更改一个控件的选择,所有其他控件的选择都会更改为同一个项目。或者换句话说,如果我将组合框的选择更改为第 5 项,另一个组合框也将其选择更改为第 5 项,并且列表框也将其选择更改为第 5 项。有人知道如何避免这种情况吗?

编辑: 以下是导致相同行为的示例代码:

私有列表TestList;

    private void Form1_Load(object sender, EventArgs e)
    {
        TestList = new List<foo>();
        for (int i = 0; i <= 5; i++)
        {
            foo f = new foo();
            f.test = "Test_" + i;
            TestList.Add(f);
        }
        comboBox1.DataSource = TestList;
        comboBox1.DisplayMember = "test";
        comboBox2.DataSource = TestList;
        comboBox2.DisplayMember = "test";
    }

    class foo
    {
        private string _test;
        public string test
        {
            get
            {
                return _test;
            }
            set
            {
                _test = value;
            }
        }
    }

如果我更改combobox1 的item,combobox2 的item 会自动更改为相同的item。

图片:1

【问题讨论】:

  • 也许你可以把有问题的代码更容易得到答案。

标签: c# binding controls


【解决方案1】:

我想查看您的控件,但两者的数据源 comboBox1.DataSource = 测试列表;和 comboBox2.DataSource = TestList;是相同的。因此,当您更改其中一个内容时,它会影响另一个。

【讨论】:

  • 是的,源是相同的,当您更改数据源中的数据时,它当然会影响两个控件。但是数据源似乎有一个属性“选定的值/项目”对我来说毫无意义......
【解决方案2】:

我至少找到了一个不显示此行为的临时解决方案。

来自:

combobox1.DataSource = TestList;

到:

combobox1.DataSource = Testlist.ToList();

对于所有有相同问题的人,请查看以下链接: https://blogs.msdn.microsoft.com/bethmassi/2007/09/19/binding-multiple-combo-boxes-to-the-same-data-source/

One DataSource for multiple controls

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多