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 изменяются вы не уведомлены. Уведомление происходит только в том случае, если элементы добавлены, заменены, удалены или перемещены.