Если мы проверим исходный код ObservableCollection , мы увидим, что он реализовал INotifyCollectionChanged и INotifyPropertyChanged по умолчанию, а List не сделал.
public class ObservableCollection<T> : Collection<T>, INotifyCollectionChanged, INotifyPropertyChanged
public class List<T> : ICollection<T>, IEnumerable<T>, IEnumerable, IList<T>, IReadOnlyCollection<T>, IReadOnlyList<T>, ICollection, IList
Если список будет содержать одни и те же элементы на протяжении всего их срока службы, но отдельные объекты в этом списке будут меняться, тогда достаточно, чтобы только объекты вызывали уведомления об изменениях (обычно через INotifyPropertyChanged ) и List достаточно. Но если список будет время от времени содержать разные объекты, или если порядок меняется, то вам следует использовать ObservableCollection .
Поэтому мы всегда предлагаем пользователям выбирать ObservableCollection вместо Список .