Bonjour,
Je dispose d'une PagedCollectionView et j'aimerai lui appliquer un filtre de tel sorte quelle me renvoie uniquement les elements dont un champ spécifique est different.
Par exemple une liste
<1,2,3,1,4,1>
me renverrai:
<1,2,3,4>
Bonjour,
Je dispose d'une PagedCollectionView et j'aimerai lui appliquer un filtre de tel sorte quelle me renvoie uniquement les elements dont un champ spécifique est different.
Par exemple une liste
<1,2,3,1,4,1>
me renverrai:
<1,2,3,4>
Avec la propriété Filter
Pas teste mais ca devrait etre bon.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 List<int> distinct = new List<int>(); collectionView.Filter = f => { int i = (int)f; var result = distinct.Contains(i) == false; if(result) distinct.Add(i); return result; };
Je peux te demander comment fais tu pour maitriser aussi bien les fonctions associés aux types de données.
Existe t'il des tutos ou bien ca vient avec l'experience?
J'ai du mal a comprendre les quelques lignes de codes que tu m'as écrit....![]()
Ca vient avec l'experience.
En fait la propriete Filter est de type Predicate<T> c'est a dire qu'elle prends en parametre un type T et doit retourner un bool (equivalent a Func<bool, T> donc).
Ce predicat sera appele pour chacun des elements de ta PagedCollectionView lorsque tu appelera la methode Refresh (il me semble).
Le code en lui meme c'est pas tres complique.
En gros ca donne :
Pour chaque element de ta source, je regarde si il est deja passe, si non alors je retourne true (pour dire que cet objet satisfait au filtre et qu'il doit donc etre present) et je l'ajoute dans une liste pour dire que cet objet vient de passe. Si non alors je retourne false pour dire que l'objet ne satisfait pas le filtre.
Avec ton exemple
1 est-il present dans la liste "distinct" ? Non
Je l'ajoute
Je retourne true
Pareil pour 2 et 3
Ensuite le 1 revient
Est-ce qu'il est present dans la liste "distinct" ? Oui
Je retourne false.
Je confirme qu'il faut appeler la méthode PageCollectionView.Refresh() pour passer par la méthode de filtre. Autrement, Skyounet a tout dit, rien à rajouter
Juste une question : ce traitement doit-il s'opérer qu'une seule fois ? Et est-ce que tu utilises la PagedCollectionView pour dédoublonner uniquement ?
Partager