2011-11-01 4 views
0

J'essaye d'utiliser CollectionViewSource pour afficher certaines données, et tous les exemples/tutoriels que j'ai vus ont une classe personnalisée construite, qu'ils utilisent dans une autre classe, qui hérite de ObservableCollection. Je suis nouveau à la fois en utilisant CollectionViewSource et ceci est seulement ma troisième implémentation de MVVM, donc je pourrais mal comprendre le modèle de programmation, mais ma question est: où dois-je mettre la classe ObservableCollection et/ou la classe personnalisée? Je me sens comme ils devraient aller dans le modèle, mais je ne suis pas sûr de ce qui est lié à la vue. Est-ce que je ne fais que construire ces classes externes, puis les référencer dans Model/ViewModel?Utilisation de MVVM avec CollectionViewSource

Toute aide est appréciée

Répondre

5

Tout d'abord, je dirais qu'il n'y a pas besoin d'hériter de ObservableCollection<T> sauf si vous ajoutez des fonctionnalités à ce que j'ai rarement, voire jamais, nécessaire de le faire.

Dans la plupart des cas, je crée des propriétés ViewModel de type ObservableCollection<T>, puis les remplissez à partir du modèle chaque fois que je charge les données. Cela a l'avantage que le modèle n'a pas besoin d'utiliser ObservableCollection<T> (il peut être n'importe quel IEnumerable<T>) et cela signifie que plus tard, quand je (presque inévitablement) vouloir envelopper tout ce que je reviens du modèle en un autre spécifique à l'instance Voir le modèle Je suis seulement obligé de changer mes classes de modèles de vue existantes. Une fois que vous avez une propriété sur votre modèle de vue, vous pouvez simplement lier votre CollectionViewSource à cette propriété et elle fera tout à partir de là. Il est à noter que le CollectionViewSource ne se soucie pas vraiment du type de la propriété, de sorte que vous pouvez exposer votre collection à la vue comme ICollection<T>, IEnumerable<T> ou (je crois) même comme object et le CollectionViewSource le traitera toujours le même comme si elle est exposée comme ObservableCollection<T>.

Désolé pour la réponse légèrement décousue. La version concise serait "cela dépend de la situation" mais j'ai tendance à suivre cette approche générale dans la plupart des cas.

+0

Merci, cela couvrait tout ce que je me demandais. – SeanVDH

Questions connexes