CollectionView.DeferRefresh() throws exception

Houman picture Houman · May 17, 2011 · Viewed 8.3k times · Source

There are cases when you have many UI updates due a massive amount of INotifyChangedProperties events. In that case you might want to signal the changes to UI only once when all the properties are set like in a batch.

I found this great article that explains how to defer the refresh of the ViewCollection:

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

However I get an exception when the View is deferred and I try to add something to the collection. I don't understand why this shouldn't be allowed. That's the whole point of it in first place.

InvalidoperationException: Cannot change or check the contents or Current position of CollectionView while Refresh is being deferred.

Does anyone know how to solve this problem? Many Thanks,

Answer

Quarkly picture Quarkly · Mar 16, 2012

I think you are misunderstanding or misrepresenting the MSDN help on the subject. They are saying that you don't have to modify the underlying collection to sort or filter. They are not saying that you can't modify the underlying collection. The OP has a very valid point. We have a large collection that has been sorted and filter for the user and it is displayed in a list box. When the user selects a range of those records and wants to delete them, we are forced into a situation where the ListCollectionView refreshs view for every item that was deleted.

I think the OP's question is very valid. The performance is horrendous because we have multiple filters on a huge set of data. The DeferRefresh has a real purpose on a class like the ListCollectionView, but in inexplicably diabled for inserts and deletes, when you need it the most.