Windows窗体组合框控件的奇怪行为

时间:2012-01-04 00:39:01

标签: c# winforms data-binding combobox

我正在开发一个小型桌面应用程序,我的表单上有几个下拉列表(combobox-es)。我填充了一个字符串列表,这些字符串将用作所有字符串的数据源。这是我的Form.cs类中的示例:

List<string> datasource = new List<string>();
datasource.Add("string 1");
datasource.Add("string 2");

然后我将此列表设置为几个组合框的数据源:

 cmbDataType1.DataSource = datasource;
 cmbDataType2.DataSource = datasource;

这一切都发生在同一个方法中,从Form构造函数调用。 这是一个奇怪的部分:在我更改其中一个中的选定值后,将在另一个中设置相同的值。没有设置SelectedIndexChange个事件。我搞砸了某个地方,但我不能把手指放在哪里......

3 个答案:

答案 0 :(得分:10)

您看到的行为是设计的。当您将同一对象绑定为多个控件的数据源时,所有控件都共享相同的绑定源。

如果明确为每个控件分配一个新的绑定源,即使使用相同的数据源,所有控件都将是未绑定的,并且将彼此独立运行:

cmbDataType1.DataSource = new BindingSource(datasource, "");
cmbDataType2.DataSource = new BindingSource(datasource, "");

答案 1 :(得分:4)

在下次绑定dataSource之前,您应该为控件设置一个新的BindingContext

cmbDataType1.BindingContext = new BindingContext();
cmbDataType1.DataSource = datasource;

cmbDataType2.BindingContext = new BindingContext();
cmbDataType2.DataSource = datasource;

答案 2 :(得分:3)

由于您绑定的是与预期行为完全相同的datasource。如果您不希望更改选定项,则需要将绑定更改为OneWay绑定或使用不同的对象。