2009-09-23 2 views
4

Я пытаюсь вставить ряд обновлений в коллекцию, к которой я привязал окно списка. Поскольку список может стать довольно большим, я пытаюсь отключить обновления (сортировка и т. Д.), Пока не закончу вставку всех новых элементов.WPF/DeferRefresh со связанным списком

Я понял:

using (col.DeferRefesh()) 
{ 
    .. add the items 
} 

, но это вызывает исключение, говоря, что я не могу добавлять/удалять элементы, а DeferRefresh() включен. Есть ли правильный шаблон для выполнения того, что я пытаюсь сделать?

ответ

1

Добавление или удаление элементов из CollectionView вызовет InvalidOperationException, поскольку набор операций IsAddingNew или IsEditingItem соответствует true для CollectionView.

Что вы можете сделать в DeferRefresh() - это изменить описание сортировки.

This blog дает представление о том, где используется DeferRefresh(). Кроме того, это довольно противоречиво, чтобы отложить обновление представления коллекции, когда вы фактически меняете значения в коллекции.

+3

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

+0

соленья - я полностью согласен! Таким образом, эти изменения будут выполняться на уровне пользовательского интерфейса, а не на уровне кода. Как только мы выйдем из блока использования. EndDefer() вызывается автоматически для совершения тех изменений, которые вы сделали. Надеюсь, это поможет. –

0

Для этого вам необходимо будет осуществить/получить свою собственную коллекцию и реализовать функциональность Defer обновления на уровне сбора, а затем огнь коллекции изменили событие со сбросом, как тип изменений при Defer обновление завершает

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