Я пытаюсь реализовать следующее:
Два поля со списком в форме Winforms, первое содержит список родительских категорий, второе - дочерние элементы родительского, дочерний список меняет содержимое в зависимости от выбора в родительском.
Я пытаюсь сделать это правильно, используя привязку данных, но нахожу странную причуду с элементом управления ComboBox.
Я установил источник данных родителя вручную:
cboParent.DataSource = ParentDataSource
, где ParentDataSource равен IList<ParentDTO>
.
Затем я могу привязать выбранный элемент к DTO таким образом:
cboParent.DataBindings.Add(new Binding("SelectedItem", bindingSource, "Parent", true, DataSourceUpdateMode.OnPropertyChanged));
привязка к Parent
a ParentDTO
объекту в моем всеобъемлющем DTO.
Пока все довольно стандартно. Это работает и записывает изменения в мой объект DTO, как только я выбираю что-то новое в списке, отлично!
Затем я связываю источник данных дочернего поля со списком со списком в всеобъемлющем DTO:
cboChild.DataBindings.Add(new Binding("DataSource", bindingSource, "Children", true, DataSourceUpdateMode.OnPropertyChanged));
, где Children - это IList<ChildDTO>
на всеобъемлющем DTO.
Это также работает нормально, и как только я меняю родительский выбор, докладчик меняет список Children
в DTO, и значения, показанные в cboChildren, меняются, фантастически я слышу, как ты плачешь (и я сделал это сам)!
К сожалению, кажется, что если вы используете привязку данных для установки источника данных в ComboBox, события SelectedItemChanged, SelectedIndexChanged и SelectedValueChanged вообще никогда не срабатывают! Это означает, что привязка данных OnProperyChanged не будет работать для второго комбинированного списка. OnValidation работает, но мне это кажется немного странным, и мне было интересно, сталкивался ли кто-нибудь с этим раньше и выяснили ли они, как заставить его работать?
Заранее спасибо
Stu