ObservableCollection vs. List

У меня есть множество объектов с вложенным List в каждом.

Например, у меня есть BaseEntity которого есть List . Класс ColumnEntity имеет List и т. Д.

Мы работаем с интерфейсом WPF , и нам нужно отслеживать все изменения в каждом списке BaseEntity . Он реализуется путем создания экземпляра new ObservableCollection на основе нужного списка и привязки к этому ObservableCollection .

Какие плюсы и минусы меняют все эти вложенные Lists на ObservableCollections ? Таким образом, мы можем отслеживать все изменения в BaseEntity самостоятельно, не переназначая каждый список BaseEntity измененной привязке ObservableCollection ?

Предполагая, что методы, специфичные для List , никогда не используются.

Интересный вопрос, учитывая, что как List, так и ObservableCollection реализуют IList там не так много различий, ObservableCollection также реализует интерфейс INotifyCollectionChanged , который позволяет WPF привязываться к нему.

Одно из главных отличий заключается в том, что ObservableCollection не имеет метода AddRange , который может иметь некоторые последствия.

Кроме того, я бы не использовал ObservableCollection для тех мест, где я знаю, что я не буду привязываться к ним, поэтому важно пересмотреть свой дизайн и убедиться, что вы применяете правильный подход при разделении слоев, вызывающих озабоченность.

Что касается различий между Collection и List вы можете посмотреть здесь Generic Lists vs Collection

Это зависит от того, что вы подразумеваете под этим:

нам нужно отслеживать все изменения в каждом списке BaseEntity

Достаточно ли было бы отслеживать изменения объектов уже в списке? Или вам нужно знать, когда объекты удаляются из / добавляются в / изменять позиции в списке?

Если список будет содержать одни и те же элементы в течение всего их жизненного цикла, но отдельные объекты в этом списке будут изменены, то достаточно, чтобы только объекты поднимали уведомления об изменениях (обычно через INotifyPropertyChanged ) и List . Но если список будет содержать разные объекты время от времени, или если порядок изменится, вы должны использовать ObservableCollection .

Поэтому, хотя различия могут быть интересными (и предыдущий плакат уже охватил их), обычно у вас не будет такого выбора – вам нужно ObservableCollection или вы этого не сделаете.

Список представляет собой строго типизированный список объектов, к которым можно получить доступ по индексу. Он предоставляет методы для поиска, сортировки и манипулирования списками. Класс List является общим эквивалентом classа ArrayList. Он реализует общий интерфейс IList, используя массив, размер которого динамически увеличивается по мере необходимости.

ObservableCollection – это общий динамический dataset, который использует интерфейс «INotifyCollectionChanged» для предоставления уведомлений, когда элементы добавляются, удаляются или когда вся коллекция обновляется.

Узнайте больше об этом по этой ссылке: http://www.codeproject.com/Articles/42536/List-vs-ObservableCollection-vs-INotifyPropertyCha

Я не вижу проблем с этим, кроме очень незначительных издержек производительности.

Обратите внимание: если вы изменяете внутренние списки напрямую, вы не будете уведомлены об изменениях. Также, если объекты, содержащиеся в ObservableCollection, изменены, вы не будете уведомлены. Уведомление происходит только, если элементы добавляются, заменяются, удаляются или перемещаются.

Еще одно важное отличие состоит в том, что вы можете получить доступ к ObservableCollection только из streamа, на котором он был создан, где в качестве списка можно получить доступ из любого streamа.

  • MVVM: привязка переключателей к модели просмотра?
  • Как преобразовать ImageSource в массив байтов?
  • Как отключить эффекты MouseOver для кнопки в WPF?
  • WPF: как динамически добавлять элементы управления в динамически созданное окно WPF
  • Создание определенного текста в текстовом поле
  • Вызывающий stream должен быть STA, потому что многие компоненты пользовательского интерфейса требуют этого в WPF
  • WPF TreeView HierarchicalDataTemplate - привязка к объекту с несколькими дочерними коллекциями
  • {x: Null} против прозрачного?
  • Используйте «real» CultureInfo.CurrentCulture в привязке WPF, а не CultureInfo от IetfLanguageTag
  • Стили сплава XAML
  • Как перетащить UserControl внутри canvasа
  • Interesting Posts

    4 ГБ оперативной памяти в MacOSX 10.5, только 3 ГБ в MacOSX 10.6

    Замена значений из столбца с использованием условия в R

    Java Generics: общий тип, определенный только как возвращаемый тип

    Есть ли способ заставить ПК выглядеть как USB-накопитель на устройстве, которое считывает содержимое с USB-накопителя?

    Возrotation массива с использованием C

    Должен ли я избегать многозадачного (конкретного) наследования в Django любыми способами?

    Angular.js: Как работает $ eval и почему он отличается от ванильного eval?

    Как обновить запись с помощью Entity Framework 6?

    Как перезапустить подсчет из 1 после удаления таблицы в MS Access?

    Как инициировать событие после использования event.preventDefault ()

    почему я должен сделать копию фрейма данных в пандах

    Пользовательская логика сортировки в OrderBy с использованием LINQ

    Ошибка после обновления pip: невозможно импортировать имя ‘main’

    Как предотвратить запуск автозапуска Linux?

    Вывод в формате таблицы в Java System.out

    Давайте будем гением компьютера.