Почему я должен избегать создания экземпляров CollectionView напрямую? - PullRequest
0 голосов
/ 30 октября 2018

Документация класса CollectionView гласит:

Вы не должны создавать объекты этого класса в вашем коде. Чтобы создать представление коллекции для коллекции, которая реализует только IEnumerable, создайте объект CollectionViewSource, добавьте свою коллекцию в свойство Source и получите представление коллекции из свойства View.

Другими словами, я должен написать:

var cvs = new CollectionViewSource();
cvs.Source = myData.Where(d => someCondition(d));
var view = cvs.View;

вместо

var view = new CollectionView(myData.Where(d => someCondition(d));

Однако документация не объясняет почему Я должен это сделать. Обе опции кажутся работающими.

Что плохого случится, если я выберу вариант 2 вместо варианта 1?

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Есть несколько специализаций класса CollectionView, например, ListCollectionView. Всякий раз, когда вы связываетесь с какой-либо коллекцией, автоматически создается представление, основанное на типе исходной коллекции. Вместо явного создания CollectionView или CollectionViewSource вы можете получить представление коллекции по умолчанию, используя статический метод CollectionViewSource.GetDefaultView:

ICollectionView view = CollectionViewSource.GetDefaultView(myData);

Возвращает ListCollectionView, если myData реализует IList.

Совершенно нормально выставить ICollectionView из модели представления, если вы выполняете там фильтрацию или сортировку. CollectionViewSource в основном используется, когда вы хотите выполнить фильтрацию, сортировку или группировку исходной коллекции в представлении.

0 голосов
/ 30 октября 2018

Привязка CollectionView может вызвать проблемы в будущем, если вы хотите изменить способ отображения ваших данных.

Из документации CollectionViewSource:

Поскольку представление не изменяет базовую исходную коллекцию, исходная коллекция может иметь несколько связанных представлений. Используя представления, вы можете отображать одни и те же данные по-разному. Например, вы можете использовать два представления коллекции объектов Task для отображения задач, отсортированных по приоритету в одной части страницы и сгруппированных по областям в другой части страницы.

Привязка напрямую к одному CollectionView ограничивает способы отображения ваших данных. Короче говоря, CollectionViewSource лучше привязывает ваши коллекции в XAML при связывании.

...