2010-03-02 4 views
1

Si vous utilisez CollectionViewSource dans le code WPF Custom Control derrière?WPF CollectionViewSource dans une mauvaise utilisation du contrôle personnalisé?

Je suis demandé parce que le CollectionViewSource.GetDefaultView(SOURCE) avec .Filter fixé change le point de vue de telle sorte que toutes les instances du contrôle ont la même vue. Cela ne signifie-t-il pas que dans le code du contrôle personnalisé, vous devriez éviter d'utiliser CollectionViewSource?

Répondre

1

Cela dépend du comportement souhaité. Par exemple. Si vous aviez plusieurs listes d'états à l'écran et que vous vouliez les filtrer tous par région en même temps, cela pourrait être un comportement souhaité. Vous pouvez toujours forcer une source de vue différente dans les cas où vous ne souhaitez pas que les éléments soient liés aux mêmes critères de filtre. Je pense qu'éviter l'utilisation de CollectionViewSource jusqu'à ce que vous compreniez les interactions des commandes ItemsSource -> CollectionView -> Bound Item est probablement une bonne idée, mais je ne sais pas si j'irais jusqu'à dire que vous devriez évitez-le en général. Je pense qu'il peut être raisonnable de dire que si deux listes d'un formulaire ont différentes exigences de filtrage/tri, elles doivent être liées à des propriétés source différentes (même si ces propriétés sont des clones droits d'une source sous-jacente unique). De cette façon, vous pouvez toujours appliquer le filtrage et le stockage au niveau de CollectionViewSource mais sans conséquences inattendues plus tard.

+0

Vous avez parfaitement compris mon point de vue, et c'est la grande question: si les utilisateurs de MyControl tolèrent que chaque contrôle a sa propre DataSource bien que ces sources soient un clone identique. Pensons à la liste des personnes qui doit être ajoutée à DynamicSource. Cela résout vraiment le problème, mais la question est: est-ce acceptable à votre avis? –

+1

Si vous développez un contrôle pour les autres, je suppose que vous voudriez leur cacher cette complexité. Je me lierais probablement à une collection 'CollectionViewSource' personnalisée dans vos propres liaisons. Pour limiter votre propre complexité de code, vous pouvez définir 'CollectionViewSource's dans la section de ressource de votre contrôle, tous liés à la même source externe, puis lier vos contrôles d'éléments individuels au' CollectionViewSource' approprié. –

Questions connexes