A List<>
is simply an automatically resizing array 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 standard wrapper around a list or a collection (it implements IBindingList
), that raises events when you modify it. This is required to do two way databinding, since controls need to know when the list changes to update their state.
When you set a BindingSource's DataSource to a List<>
, it internally creates a BindingList to wrap your list. You may want to use a BindingList instead if you want to access it outside of the BindingSource, but otherwise it's just the same.
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.