ObservableCollection против списка
у меня есть много объектов с вложенными List<>
в каждой.
например, у меня есть BaseEntity
имеющего List<ColumnEntity>
.
ColumnEntity
класс List<Info>
и так далее.
мы работаем с WPF UI, и нам нужно отслеживать все изменения в каждом списке BaseEntity
. Он реализуется путем создания экземпляра new ObservableCollection
исходя из необходимого списка, и с привязкой к этому ObservableCollection
.
каковы плюсы и минусы изменения всех этих вложенных Lists
to ObservableCollections
? Таким образом, мы можем отслеживать все изменения в BaseEntity
сам без переназначения каждого списка BaseEntity
изменить привязанный ObservableCollection
?
предполагая, что методы, специфичные для List
никогда не используются.
5 ответов:
интересный вопрос, учитывая, что и список и
ObservableCollection
реализоватьIList<T>
там нет большой разницы,ObservableCollection
осуществляетINotifyCollectionChanged
интерфейс, который позволяет WPF привязываться к нему.одно из главных отличий заключается в том, что
ObservableCollection
нетAddRange
метод, который может иметь некоторые последствия.также я бы не использовал
ObservableCollection
для мест, где я знаю, что я не буду привязываться, по этой причине важно перейти к вашему дизайну и убедитесь, что вы принимаете правильный подход в разделении слоев беспокойства.что касается различий между
Collection<T>
иList<T>
вы можете посмотреть здесь общие списки против коллекции
Это зависит от того, что именно Вы имеете в виду это:
нам нужно отслеживать все изменения в каждом списке BaseEntity
будет ли достаточно отслеживать изменения объектов уже в списке? Или вам нужно знать, когда объекты удаляются/добавляются/изменить позиции в списке?
если список будет содержать одни и те же элементы в течение всего их срока службы, но отдельные объекты в этом списке будут меняться, то этого достаточно для всего объекты для вызова уведомлений об изменениях (обычно через
INotifyPropertyChanged
) иList<T>
вполне достаточно. Но если список будет содержать разные объекты время от времени, или если порядок меняется, то вы должны использоватьObservableCollection<T>
.поэтому, хотя различия могут быть интересными (и предыдущий плакат уже покрыл их), обычно у вас не будет такого большого выбора - либо вам нужно
ObservableCollection<T>
или нет.
список представляет собой строго типизированный список объектов, к которым можно получить доступ по индексу. Он предоставляет методы для поиска, сортировки и управления списками. Класс List является общим эквивалентом класса ArrayList. Он реализует универсальный интерфейс IList, используя массив, размер которого динамически увеличивается по мере необходимости.
ObservableCollection-это общий динамический сбор данных, который использует интерфейс "INotifyCollectionChanged" для предоставления уведомлений при добавлении элементов, удаляется, или когда вся коллекция обновляется.
подробнее об этом читайте по этой ссылке: http://www.codeproject.com/Articles/42536/List-vs-ObservableCollection-vs-INotifyPropertyCha
Я не вижу никаких проблем с этим, кроме очень незначительных накладных расходов на производительность.
обратите внимание, что если вы измените внутренние списки напрямую, вы не уведомили об изменениях. Кроме того, если объекты, которые содержатся в ObservableCollection изменяются вы не уведомлены. Уведомление происходит только в том случае, если элементы добавлены, заменены, удалены или перемещены.