2009-09-23 15 views
4

J'essaye de pousser un certain nombre de mises à jour à une collection à laquelle j'ai lié une zone de liste. Comme la liste peut devenir assez grande, j'essaie de désactiver les mises à jour (tri, etc.) jusqu'à ce que j'aie fini d'insérer tous les nouveaux éléments.WPF/DeferRefresh avec la liste déroulante liée

Je figurés:

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

mais cela soulève une exception en disant que je ne peux pas ajouter/supprimer des éléments en DeferRefresh() est activée. Existe-t-il un modèle approprié pour faire ce que j'essaie de faire?

Répondre

1

L'ajout ou la suppression d'éléments à partir d'un objet CollectionView entraîne la définition d'un InvalidOperationException en tant qu'opérations IsAddingNew ou IsEditingItem comme vrai pour le système CollectionView. Ce que vous êtes autorisé à faire dans DeferRefresh() est de changer les descriptions de tri.

This blog donne une idée de l'utilisation de DeferRefresh(). En outre, il est assez contradictoire de différer l'actualisation de la vue de collection lorsque vous modifiez réellement des valeurs dans une vue de collection.

+3

Il y a des situations où vous voudriez suspendre des mises à jour à la collection et à la collection pendant que vous faites un tas de changements – cordialgerm

+0

pickles - Je suis entièrement d'accord! Donc, ces changements seraient effectués au niveau de l'interface utilisateur et non au niveau du code. Une fois que nous quittons le bloc utilisant. EndDefer() est appelé automatiquement pour valider les modifications que vous avez apportées. J'espère que cela pourra aider. –

0

Pour ce faire, vous aurez besoin de mettre en œuvre/tirer votre propre collection et mettre en œuvre une fonctionnalité de rafraîchissement defer au niveau de la collecte, puis tirer une collection événement changé avec remise à zéro comme le type de changement lorsque l'actualisation defer complète

Questions connexes