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


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

В настоящее время у меня есть List<MyClass> и установить bindingsource для этого и практическое руководство к bindingsource.

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

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

2 74

2 ответа:

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

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

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

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

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

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