سؤال

هناك حالات عندما يكون لديك العديد من تحديثات UI بسبب كمية هائلة من الأحداث InotifyChangEctroperties.في هذه الحالة، قد ترغب في الإشارة إلى التغييرات على UI مرة واحدة فقط عندما يتم تعيين جميع الخصائص في دفعة واحدة.

وجدت هذه المقالة الرائعة التي تشرح كيفية إرجاء تحديث العطل:

http://marlongrech.wordpress.com/2008/11/22 / icolletionview - أوضح /

ومع ذلك أحصل على استثناء عند تأجيل العرض وأحاول إضافة شيء إلى المجموعة.لا أفهم لماذا لا ينبغي السماح بذلك.هذه هي النقطة برمتها في المقام الأول.

InvalentOperationException: لا يمكن تغيير أو التحقق من المحتويات أو الموضع الحالي ل CollectionView بينما يتم تأجيل التحديث.

هل يعرف أحد كيفية حل هذه المشكلة؟ شكرا جزيلا،

هل كانت مفيدة؟

المحلول

Yes, don't modify the collection in question. I think that you are misunderstanding the purpose of a collection view. This is what MSDN says;

You can think of a collection view as a layer on top of a binding source collection that allows you to navigate and display the collection based on sort, filter, and group queries, all without having to manipulate the underlying source collection itself.

So in short, don't defer the refresh until you are done adding and removing, and otherwise manipulating your collection.

نصائح أخرى

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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top