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, поэтому у вас есть ваши объекты там все время :)


вам нужны наблюдаемые коллекции и реализация IPropertyChange:

ComboBox привязан к ObservableCollection не обновляется