2010-09-29 6 views
2

Quelles sont les différences pratiques entre l'utilisation de la propriété CollectionViewSource.View.Filter et l'événement CollectionViewSource.Filter? Y a-t-il des situations où vous utiliseriez l'un par rapport à l'autre ou est-ce une question de préférence?Evénement Filtrage CollectionViewSource vs Propriété

Cheers,
Berryl

EDIT: Je ne vois que les documents disent « Si votre objet de vue provient d'un objet CollectionViewSource, vous appliquez la logique de filtrage en définissant un gestionnaire d'événements pour l'événement de filtre. » bien que rien ne vous empêche de définir la propriété sur la vue, et cela ne dit pas pourquoi. L'avantage que j'ai trouvé jusqu'à présent dans la définition de l'événement sur CollectionViewSource est que vous pouvez implémenter toute votre logique de filtrage dans un gestionnaire d'événements, puis utiliser View.Refresh (ou View.DeferRefresh) pour l'appeler en tant qu'utilisateur. modifie les critères de filtrage.

+0

Vous pourriez trouver une réponse ici: http://bea.stollnitz.com/blog/?p=31 Je vous conseille de lire ses autres messages sur CollectionView :) – Bruno

Répondre

0

La définition de l'événement Filter dans CollectionViewSource signifierait que l'événement est appelé même si aucun filtrage n'est requis, ce qui rendrait le processus moins efficace.

La manière officielle d'utiliser l'événement Filter est de l'ajouter au filtrage et de le supprimer ultérieurement lorsque le filtre est effacé.

viewsource.Filter += viewsource_Filter;

Puis:

viewsource.Filter -= viewsource_Filter; // Comment savez-vous combien d'événements il y a !? Si vous utilisez l'événement, vous devez vous assurer que vous n'ajoutez pas l'événement chaque fois que la valeur du filtre change, car en plus d'avoir des événements redondants qui se cachent (= l'application fonctionne plus durement pour rien), vous devrez supprimer tous les événements afin d'effacer le filtre.

Ainsi, il est avantageux d'utiliser la propriété Filter, car vous pouvez plus facilement effacer le filtre en définissant la propriété sur null.

viewsource.view.Filter = null;

Questions connexes