【问题标题】:One DataSource for multiple controls一个数据源用于多个控件
【发布时间】:2012-02-01 13:10:20
【问题描述】:

我的 winforms 应用程序中有两个 ListBox,我为它们分配了一个数据源,如下所示:

private void MakeMeasurementUnits()
{
    var units = new List<MeasurementUnit>
                    {
                        new MeasurementUnit {Name = "Current", SiUnit = "A"},
                        new MeasurementUnit {Name = "Voltage", SiUnit = "V"},
                        new MeasurementUnit {Name = "Time", SiUnit = "s"},
                        new MeasurementUnit {Name = "Temprature", SiUnit = "°C"}
                    };

    lbxXunit.DataSource = units;
    lbxYunit.DataSource = units;
}

奇怪的是(或者可能是因为这是我的第一次!),当我单击其中一个 lisboxes 的项目时,第二个列表框中的相同项目也被选中。这是默认行为吗?如何防止这种情况?如果这是默认行为,它有什么用处?

我发现快速解决方法是制作两个不同的数据源(相同的东西有另一个名字)

【问题讨论】:

    标签: c# winforms datasource


    【解决方案1】:

    您注意到的行为是 winforms 控件的默认/正确行为。您可以通过为第二个列表框控件设置新的 BindingContext 来实现您的目标,而无需创建数据源的副本。

    BindingContext

    【讨论】:

    • 这是默认行为,但它是否正确取决于应用程序。如果您有一个要从中选择两个项目的列表,那么更改一个输入会影响另一个输入肯定是不正确的行为。
    【解决方案2】:

    是的,这是正常行为。这是因为 ListView 控件使用 BindingSource 对象来跟踪当前选定的项目。 (如果没有 BindingSource,List 无法跟踪所选项目。)

    默认情况下,WinForms 控件中的 DataSource 使用 WinForms 系统本身为其创建的 BindingSource。

    您可以在以下位置阅读有关 BindingSource 的更多信息: http://msdn.microsoft.com/en-us/library/system.windows.forms.bindingsource.aspx

    这里有一篇文章也可能有所帮助: http://blogs.msdn.com/b/bethmassi/archive/2007/09/19/binding-multiple-comboboxes-to-the-same-datasource.aspx

    【讨论】:

      【解决方案3】:

      这是正确的行为。 WindowsForms 中的datasource 管理跟踪控件上的选定项目并操作绑定数据。

      您已经找到的解决方案:为这些控件分配 2 个不同的 data sources objects

      【讨论】:

        【解决方案4】:

        列表框似乎缓存了绑定源。这是默认行为。如果您想避免这种情况,最简单的方法是创建列表的副本以绑定到第二个数据源:

        lbxXunit.DataSource = units;
        lbxYunit.DataSource = units.ToList();
        

        当您对同一数据有多个视图并希望同步这些项目的选择时,这很有用。

        【讨论】:

          猜你喜欢
          • 2011-12-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多