Interesting question, considering that both List
and ObservableCollection
implement IList<T>
there isn’t much of a difference there, ObservableCollection
also implements INotifyCollectionChanged
interface, which allows WPF to bind to it.
One of the main differences is that ObservableCollection
does not have AddRange
method, which might have some implications.
Also, I would not use ObservableCollection
for places where I know I would not be binding to, for this reason, it is important to go over your design and make sure that you are taking the correct approach in separating layers of concern.
As far as the differences between Collection<T>
and List<T>
you can have a look here
Generic Lists vs Collection