CollectionView.DeferRefresh () генерирует исключение - PullRequest
8 голосов
/ 17 мая 2011

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

Я нашел эту замечательную статью, в которой объясняется, как отложить обновление коллекции ViewCollection:

http://marlongrech.wordpress.com/2008/11/22/icollectionview-explained/

Однако я получаю исключение, когда представление откладывается, и я пытаюсь добавить что-то в коллекцию. Я не понимаю, почему этого нельзя допустить. Вот и весь смысл всего этого.

InvalidOperationException: Невозможно изменить или проверить содержимое или текущую позицию CollectionView во время отложенного обновления.

Кто-нибудь знает, как решить эту проблему? Большое спасибо,

Ответы [ 2 ]

16 голосов
/ 16 марта 2012

Я думаю, что вы неправильно понимаете или искажаете справку MSDN по этому вопросу. Они говорят, что вам не нужно изменять базовую коллекцию для сортировки или фильтрации. Они не говорят, что вы не можете изменить основную коллекцию. У ОП есть очень верная точка зрения. У нас есть большая коллекция, которая была отсортирована и отфильтрована для пользователя, и она отображается в списке. Когда пользователь выбирает диапазон этих записей и хочет удалить их, мы вынуждены оказаться в ситуации, когда ListCollectionView обновляет представление для каждого удаленного элемента.

Я думаю, что вопрос ОП очень актуален. Производительность ужасна, потому что у нас есть несколько фильтров для огромного набора данных. DeferRefresh имеет реальное назначение для такого класса, как ListCollectionView, но необъяснимым образом используется для вставки и удаления, когда вам это нужно больше всего.

2 голосов
/ 17 мая 2011

Да, не изменяйте данную коллекцию. Я думаю, что вы неправильно понимаете цель представления коллекции. Это то, что говорит MSDN;

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

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

...