Странное поведение управления списком Windows Forms - PullRequest
5 голосов
/ 04 января 2012

Я занимаюсь разработкой небольшого настольного приложения, и в моей форме есть несколько раскрывающихся списков (списков). Я заполняю список строк, которые будут использоваться в качестве источника данных для всех из них. Вот пример из моего класса 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 ]

10 голосов
/ 04 января 2012

Поведение, которое вы видите, является дизайном. Когда вы связываете один и тот же объект как источник данных для нескольких элементов управления, все элементы управления используют один и тот же источник привязки.

Если вы явно назначаете новый источник привязки каждому элементу управления, даже при использовании одного и того же источника данных, все элементы управления будут не связаны и будут действовать независимо друг от друга:

cmbDataType1.DataSource = new BindingSource(datasource, "");
cmbDataType2.DataSource = new BindingSource(datasource, "");
4 голосов
/ 04 января 2012

Вы должны установить новый BindingContext для элемента управления, прежде чем связывать источник данных в следующий раз:

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

cmbDataType2.BindingContext = new BindingContext();
cmbDataType2.DataSource = datasource;
3 голосов
/ 04 января 2012

Поскольку вы привязываетесь к тому же точному datasource, что и ожидаемое поведение. Вы захотите изменить привязку на OneWay или использовать другие объекты, если не хотите, чтобы выбранный элемент изменился.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...