Преимущества/Недостатки List vs BindingList

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

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

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

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

2 ответов


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

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

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

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


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

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