2010-07-15 2 views
3

Я хочу, чтобы обновить коллекцию после того, как она была изменена, но я не могу показаться, чтобы получить «далеко» от этого исключения:Изменение коллекции от CollectionChanged события

Не удается изменить ObservableCollection во время события CollectionChanged или PropertyChanged.

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

private void CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) 
{ 
    data.CollectionChanged -= CollectionChanged; 
    data.Add("Item"); 
    data.CollectionChanged += CollectionChanged; 
} 

Я попытался с помощью Диспетчера вызвать data.Add («Item»), но не повезло :(

+0

Лучшим решением здесь будет переделка, как вы делаете вещи - было бы необычно добавить элемент в коллекцию в середине обработчика события CollectionChanged, независимо от привязки/отцепления обработчика. В принципе, этот код пахнет несколькими различными способами. – slugster

+0

Чтобы лучше понять, что я пытаюсь выполнить, это служебный пейджер. пейджер подключен к коллекции, а при изменении страницы - изменения коллекции. В этот момент я запрашиваю бэкэнд для данных с индексом страницы, а когда он возвращается - colletion очищается и заполняется новыми данными. Я использую этот RadQueryableCollectionView от Telerik, который позволяет вам сказать, что в коллекции и суммарном количестве предметов есть больше предметов без реальных предметов. Все работает нормально, если вызов службы выполнен (асинхронный), так как обработчик события завершен. Но при использовании mocks - данные возвращаются мгновенно, а u остаются внутри события ... – Kestutis

ответ

1

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

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