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