我的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的项目的形式中,第二个列表框中的相同项目也被选中。这是默认行为吗?怎么预防这个?如果这是默认行为,那对它有用吗?
我找到了快速补救措施来制作两个不同的数据源(与另一个名称相同)
答案 0 :(得分:5)
列表框似乎缓存了绑定源。这是默认行为。如果您想避免这种情况,最简单的方法是创建列表的副本以绑定到第二个数据源:
lbxXunit.DataSource = units;
lbxYunit.DataSource = units.ToList();
当您拥有相同数据的多个视图并希望同步这些项目的选择时,这非常有用。
答案 1 :(得分:3)
是的,这是正常行为。这是因为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
答案 2 :(得分:2)
您注意到的行为是winforms控件的默认/正确行为。您可以通过为第二个列表框控件设置新的BindingContext而无需创建数据源副本来实现您的目标。
答案 3 :(得分:1)
这是正确的行为。 datasource
中的WindowsForms
管理跟踪控件中的所选项目,并操纵绑定数据。
您已经找到的解决方案:为这些控件分配2个不同的data sources objects
。