Can someone describe what the difference between the two are for my project.
Currently I have a List<MyClass>
and set the BindingSource to that and a DataGridView to the BindingSource.
I have implemented IEditableObject
so when CancelEdit is called I revert my object back to what it was with a Memberwise.Clone()
Will changing my List to a BindingList solve any of this and what are the advantages of using a BindingList?
The practical difference is that BindingList is for WinForms, and ObservableCollection is for WPF. From a WPF perspective, BindingList isnt properly supported, and you would never really use it in a WPF project unless you really had to.
BindingList is a generic list type that has additional binding support. While you can bind to a generic list, BindingList provides additional control over list items, i.e. if they can be edited, removed or added. BindingList also surfaces events that notify when the list has been changed.
The BindingSource component acts as an intermediary that provides binding and currency management services. At design time or run time, you can bind a BindingSource component to a complex data source by setting its DataSource and DataMember properties to the database and table, respectively.
A List<>
is simply an automatically resizing array, of items of a given type, with a couple of helper functions (eg: sort). It's just the data, and you're likely to use it to run operations on a set of objects in your model.
A BindingList<>
is a wrapper around a typed list or a collection, which implements the IBindingList
interface. This is one of the standard interfaces that support two-way databinding. It works by implementing the ListChanged
event, which is raised when you add, remove, or set items. Bound controls listen to this event in order to know when to refresh their display.
When you set a BindingSource's DataSource to a List<>
, it internally creates a BindingList<>
to wrap your list. You may want to pre-wrap your list with a BindingList<>
yourself if you want to access it outside of the BindingSource, but otherwise it's just the same. You can also inherit from BindingList<>
to implement special behavior when changing items.
IEditableObject
is handled by the BindingSource. It'll call BeginEdit on any implementing object when you change the data in any bound control. You can then call EndEdit/CancelEdit on the BindingSource and it will pass it along to your object. Moving to a different row will call EndEdit as well.
A BindingList allows two-way databinding by using events, a List does not fire events when its collection changes.
I don't think it will fix your particular problem.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With