Список <T> vs BindingList <T> Преимущества/Недостатки

Может кто-нибудь описать, какая разница между ними для моего проекта.

В настоящее время у меня есть List<MyClass> и установите BindingSource для этого и DataGridView в BindingSource.

Я реализовал IEditableObject, поэтому, когда вызывается CancelEdit, я возвращаю свой объект обратно к тому, что было с Memberwise.Clone()

Изменит ли мой список на BindingList на решение любого из этих вопросов и каковы преимущества использования BindingList?

Ответ 1

A List<> - это просто массив с автоматическим изменением размера элементов определенного типа с несколькими вспомогательными функциями (например: sort). Это просто данные, и вы, вероятно, будете использовать его для запуска операций над набором объектов в вашей модели.

A BindingList<> - это обертка вокруг типизированного списка или коллекции, которая реализует интерфейс IBindingList. Это один из стандартных интерфейсов, поддерживающих двухстороннюю привязку данных. Он работает, реализуя событие ListChanged, которое возникает при добавлении, удалении или установке элементов. Связанные элементы управления прослушивают это событие, чтобы узнать, когда обновить их отображение.

Когда вы устанавливаете источник данных BindingSource в List<>, он внутренне создает BindingList<>, чтобы обернуть ваш список. Возможно, вам захочется предварительно закрепить свой список с помощью BindingList<>, если вы хотите получить к нему доступ за пределами BindingSource, но в остальном это точно так же. Вы также можете наследовать от BindingList<> для реализации специального поведения при изменении элементов.

IEditableObject обрабатывается BindingSource. Он будет вызывать BeginEdit для любого объекта-объекта при изменении данных в любом связанном элементе управления. Затем вы можете вызвать EndEdit/CancelEdit в BindingSource и передать его вместе с вашим объектом. Перемещение в другую строку также вызовет EndEdit.

Ответ 2

A BindingList позволяет двустороннюю привязку данных с помощью событий, List не запускает события, когда изменяется его коллекция.

Я не думаю, что он исправит вашу конкретную проблему.