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