ComboBox не обновляется автоматически при изменении источника данных? - PullRequest
8 голосов
/ 11 сентября 2011

По какой-то причине при добавлении или удалении элементов из DataSource (простой BindingList) ComboBox обновляется соответствующим образом, но если я редактирую такой элемент, он не обновляется автоматически:

myBindingList[index].Name = "NewName";
myBindingList[index].Value = newValue;

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

myComboBox.DataSource = null;
myComboBox.DataSource = myBindingList;

Это решает проблему, но кажется довольно грязным решением,Также с большими списками это может стать медленным (преждевременная оптимизация, я знаю), но все же есть ли способ заставить ComboBox обновить без полного переназначения его DataSource?

Спасибо за чтение.

Ответы [ 2 ]

6 голосов
/ 11 сентября 2011

это указано на форумах MSDN:

Интерфейс IBindingList содержит событие ListChanged, в которое элементы управления, такие как комбинированный список, подключаются, если назначенный ему базовый источник данных реализует указанный интерфейс.Ваш источник данных должен вызывать соответствующий ListChanged с соответствующим ListChangeEventArgs, если вы когда-либо добавляете, удаляете, изменяете и т. д. ваш разработчик IBindingList.таким образом, всякий раз, когда базовый источник, который вы использовали для привязки к вашему комбинированному списку, изменяется, соответствующий элемент управления пользовательского интерфейса (комбинированный список) обновляется.

вы говорите, что используете BindingList и фактически получаете комбинированный списокотразить добавление или удаление элементов событий.Я думаю, что вы должны выполнить обновление элементов, уже находящихся в вашем BindingList, по-другому, потому что похоже, что правильные события BindingList не запускаются.

, вы можете либо исследовать это, либо просто воспользоваться сбросом и переназначить DataSource,Я не думаю, что это слишком плохо, вы находитесь в приложении Statefull Windows Forms, а не в SatetLess Webforms, поэтому у вас все время есть ваши объекты:)

0 голосов
/ 11 сентября 2011

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

ComboBox, связанный с ObservableCollection, не обновляется

...