A List<>
- это просто автоматически изменяющий размер массив элементов заданного типа с парой вспомогательных функций (например, сортировка). Это просто данные, и вы, вероятно, будете использовать их для выполнения операций над набором объектов в вашей модели.
A BindingList<>
- это обертка вокруг типизированного списка или коллекции, которая реализует интерфейс IBindingList
. Это один из стандартных интерфейсов, которые поддерживают двустороннюю привязку данных. Он работает путем реализации события ListChanged
, которое возникает при добавлении, удалении или установке элементов. Связанные элементы управления прослушивают это событие, чтобы узнать, когда обновлять отображение.
Когда вы устанавливаете источник данных BindingSource равным List<>
, он внутренне создает BindingList<>
, чтобы обернуть ваш список. Возможно, вы захотите предварительно обернуть свой список BindingList<>
самостоятельно, если вы хотите получить к нему доступ за пределами BindingSource, но в остальном он точно такой же. Вы также можете наследовать от BindingList<>
для реализации специального поведения при смене элементов.
IEditableObject
обрабатывается BindingSource. Он вызовет BeginEdit для любого реализующего объекта, когда вы измените данные в любом связанном элементе управления. Затем вы можете вызвать EndEdit / CancelEdit в BindingSource, и он передаст его вашему объекту. Перемещение в другую строку также вызовет EndEdit.