2016-05-23 2 views
2

Недавно я разместил вопрос на Просмотр Кода (CodeReview Question) и следуя их советам, я ищу двигаться от ObservableCollection к ICollectionView к ListCollectionView вместо этого как очевидно ListCollectionView имеет более высокую производительность фильтрации.Implenting ListCollectionView От ObservableCollection

То, что я делаю в данный момент, это;

Contracts = await ReturnContracts(); 
ContractsICollectionView = CollectionViewSource.GetDefaultView(Contracts); 
DataContext = this; 

Где Contracts является ObservableCollection и ContractsICollectionView является ICollectionView. Когда я использую ListCollectionView, вместо этого получаю эту ошибку;

Невозможно преобразовать из ICollectionView в ListCollectionView.

Настоящее определение Contracts и ContractsListCollectionView;

public ObservableCollection<ContractModel> Contracts; 
public ListCollectionView ContractsListCollectionView { get; private set; } 

Мой вопрос, как я могу реализовать ListCollectionView и воспользоваться его улучшенной фильтрации?

ответ

2

Просто объявить ContractsListCollectionView как это:

public ICollectionView ContractsListCollectionView { get; private set; } 

В качестве альтернативы, если вам действительно нужно использовать ListCollectionView методы, а не только ICollectionView (обратите внимание, что ListCollectionView реализует ICollectionView), то вам нужно сделать бросок:

ContractsICollectionView = (ListCollectionView) CollectionViewSource.GetDefaultView(Contracts); 

Обратите внимание, что хотя для ObservableCollectionCollectionViewSource.GetDefaultView действительно возвращает ListCollectionView - для других типов коллекций он может не быть то же и бросок не сработает. Однако, поскольку вы используете его только с ObservableCollection - отличное качество.

+0

Спасибо за ваш ответ. Я пытаюсь использовать «ListCollectionView» из-за его очевидной повышенной производительности с большими DataSets (у меня есть около 28000 компаний для фильтрации). – CBreeze

+0

В обоих методах выше типа _underlying_ будет ListCollectionView. Это просто в первом случае вы получаете доступ к нему через интерфейс (ICollectionView) и во втором случае напрямую. Поэтому, если вы не используете его напрямую и, например, просто привяжите свою сетку к нему, используйте первое приложение. – Evk

Смежные вопросы