ComboBox не обновляется автоматически при изменении источника данных?
по какой-то причине при добавлении или удалении элементов из источника данных (простой BindingList) ComboBox обновляется соответственно, но если я редактирую такой элемент, он не обновляется автоматически:
myBindingList[index].Name = "NewName";
myBindingList[index].Value = newValue;
чтобы обновить его, когда я редактирую элемент, а не создаю или удаляю элемент, я должен сделать это после внесения изменений:
myComboBox.DataSource = null;
myComboBox.DataSource = myBindingList;
это устраняет проблему, но это кажется довольно грязным решением. Также с большими списками он может стать медленным (преждевременная оптимизация я знаю), но все же есть способ заставить ComboBox обновляться без полного повторного назначения его источника данных?
Спасибо за чтение.
2 ответов
об этом говорится на форумах MSDN:
интерфейс IBindingList содержит событие ListChanged, где элементы управления, такие как ComboBox, подключаются к базовому источнику данных if назначенный ему реализует указанный интерфейс. ваш источник должен поднять соответствующую ListChanged при правильном ListChangeEventArgs если когда вы добавляете,удаляете, изменяете и т. д. ваш разработчик IBindingList. таким образом, когда основной источник, который вы использовали для привязки к комбинированный список изменен, соответствующий элемент управления UI (combobox) обновленный.
вы говорите, что используете BindingList, и на самом деле вы получаете combobox для отражения событий добавления или удаления элементов. Я думаю, что вы должны сделать обновление элементов уже внутри вашего BindingList по-другому, потому что похоже, что правильные события BindingList не срабатывают.
вы можете либо исследовать это, либо просто жить с reset и переназначить источник данных, я не думаю, что это слишком плохо, вы находитесь в приложении Statefull Windows Forms, а не в SatetLess Webforms, поэтому у вас есть ваши объекты там все время :)