В первом случае вы настраиваете свойство зависимости, содержащее экземпляр List<T>
.
Во втором вы создаете обычное свойство CLR, но устанавливаете его как ObservableCollection<T>
.
Для привязки данных WPF здесь есть некоторые различия.
Как правило, вы хотите, чтобы все ваши свойства в DataContext (который является объектом, с которым вещи «привязываются») по умолчанию либо реализовывали INotifyPropertyChanged, либо являлись свойством зависимости. Это позволяет платформе связывания знать, когда вносятся изменения в этот объект. Однако обычно вы используете свойство зависимости только в том случае, если вы работаете с настраиваемым элементом управления - обычно лучше иметь объект, к которому привязаны ваши данные, как отдельный класс, назначенный для DataContext. (Подробнее см. Джош Смит о MVVM или мой последний подробный пост о MVVM ...)
Однако для коллекции обычно требуется, чтобы система привязки знала, когда изменяются элементы в коллекции (т. Е. Добавляется элемент). ObservableCollection<T>
обрабатывает это путем реализации INotifyCollectionChanged
.
Используя второй подход (используя ObservableCollection<T>
), ваш пользовательский интерфейс может сообщать, когда элементы были добавлены или удалены из коллекции, а не только когда назначена новая коллекция. Это позволяет всем работать автоматически, например, добавлять элементы ListBox при добавлении нового элемента в вашу коллекцию.