2012-01-03 221 views
5

我有两个ListBox在我的WinForms应用程序,我assigne数据源为他们两个如下:一个数据源的多个控件

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; 
} 

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

我找到快速的补救措施被做两个不同的数据源(与另一名同样的事情)

回答

5

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

​​

当你有相同数据的多个视图,并要同步的,这是有用这些项目的选择。

1

这是正确的行为。 WindowsForms中的datasource管理跟踪所选择的项目并控制绑定数据。

您已经找到的分辨率:将2个不同的data sources objects分配给这些控件。

3

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

默认情况下,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

2

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

BindingContext