Список <T>против BindingList <T>Преимущества / Недостатки - PullRequest
83 голосов
/ 11 февраля 2010

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

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

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

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

Ответы [ 2 ]

116 голосов
/ 11 февраля 2010

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

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

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

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

11 голосов
/ 11 февраля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...