IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

Tri ListView sur une colonne de type List<T>


Sujet :

Windows Presentation Foundation

  1. #1
    Membre habitué Avatar de thelpi
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 217
    Points : 156
    Points
    156
    Par défaut Tri ListView sur une colonne de type List<T>
    Bonjour,

    tout est dans le titre ! j'ai une ListView bindé sur des instances d'une classe personnalisé.
    Parmi les colonnes, une est bindé sur un attribut de la classe, cette attribut est de type List<UnAutreType>

    J'utilise un Converter pour afficher le contenu de la liste dans une seule cellule (chaine séparé par des ";").

    J'ai également un système de tri sur l'entête de chaque colonne, mais pour l'entête de la colonne contenant une liste ds chaque cellule, ça plante avec une
    "InvalidOperationException ( impossible de trier des List<T> )"
    voila le code de mon tri:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    private void GridViewColumnHeader_Click(object sender, RoutedEventArgs e)
            {
                DependencyObject o = VisualTreeHelper.GetParent((sender as GridViewColumnHeader));
                while (o.GetType() != typeof(ListView))
                    o = VisualTreeHelper.GetParent(o);
     
                Sort((sender as GridViewColumnHeader).Tag.ToString(), _direction, o as ListView);
     
                if (_direction == ListSortDirection.Ascending)
                    _direction = ListSortDirection.Descending;
                else
                    _direction = ListSortDirection.Ascending;
            }
     
            private void Sort(string sortBy, ListSortDirection direction, ListView lv)
            {
                if (lv.ItemsSource != null && lv.Items.Count > 0)
                {
                    ICollectionView dataView = CollectionViewSource.GetDefaultView(lv.ItemsSource);
                    dataView.SortDescriptions.Clear();
                    SortDescription sd = new SortDescription(sortBy, direction);
                    // plante sur cette ligne :(
                    dataView.SortDescriptions.Add(sd);
                    dataView.Refresh();
                }
            }
     
    // Note : je stocke le nom de l'attribut à trier dans le tag de GridViewColumnHeader...
    Enfin, ma question est donc : comment trier sur la valeur affichée par le Converter plutôt que par les attributs eux même ? (enfin je pense que ce sera la solution..., peut être y'a t'il mieux )

    Merci, bonne année

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Points : 1 313
    Points
    1 313
    Par défaut
    t'a essayer avec un iComparer ?
    normalement la liste possede un sort qui peut utiliser un comparateur personnalisé
    IKEAS : Finalement je crois que c'est dans ses faiblesses que l'on y trouve a la fois de la force et a la fois de la richesse...
    ----------------------------------------------------
    Si vous avez du taf en wpf & design d'application sympa, contactez moi !!!!
    http://ultimatecorp.eu/wpf/

Discussions similaires

  1. Réponses: 9
    Dernier message: 10/02/2011, 10h25
  2. listView sur une colonne + persistance focus élément
    Par goran kajfes dans le forum Framework .NET
    Réponses: 2
    Dernier message: 16/11/2009, 10h35
  3. date 01/01/1900 sur une colonne de type date
    Par tsdia2 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/06/2008, 15h12
  4. [VB.Net/Dataview] Comment gérer un filtre sur une colonne de type date ?
    Par silatchom dans le forum Accès aux données
    Réponses: 3
    Dernier message: 07/07/2006, 19h28
  5. [VB.NET] Listview sur une colonne
    Par olbi dans le forum Windows Forms
    Réponses: 1
    Dernier message: 09/05/2006, 10h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo