2010-06-23 5 views
2

J'ai une liste de projets dtos qui contiennent une collection de tâches. Sur mon ViewModel j'ai une ICollectionView pour les projets afin que je puisse filtrer les projets qui sont marqués comme fait voir ci-dessous le code de filtre.Filtrage d'une collection à l'intérieur d'une collection MVVM

public void FilterDoneItems() 
    { 
     if (this.MarkDone) 
     { 
      ProjectsViewSource.Filter = new Predicate<object>(FilterDone); 
     } 
     else 
     { 
      ProjectsViewSource.Filter = null; 
     } 
    } 

Cela fonctionne très bien pour les projets, mais je veux également filtrer les tâches effectuées. Comme le ProjectDTO englobe les Tâches (Liste), je ne peux pas envelopper les tâches dans un ICollectionView pour les filtrer dans le ViewModel.

Je ne suis pas sûr de la meilleure façon de filtrer sur les tâches et quelqu'un peut-il vous aider s'il vous plaît?

Répondre

1

Chaque collection a une CollectionView par défaut gérée par WPF, et lorsque vous vous liez à la collection, WPF se lie réellement à cette vue. Vous pouvez obtenir une référence à ce point de vue en appelant CollectionViewSource.GetDefaultView et régler le filtre que:

CollectionViewSource.GetDefaultView(someList).Filter = somePredicate; 
+0

Est-ce que je dois lier à la CollectionViewSource ou que je pourrais lier encore à la collecte réelle et ont le travail de filtrage? – Burt

+2

@Burt: Vous vous liez toujours à la collection actuelle. À partir du document CollectionViewSource.GetDefaultView: «Si vous liez directement à une collection, WPF se lie à l'affichage par défaut pour cette collection. – Quartermeister

Questions connexes