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 :

Listbox et items.refresh()


Sujet :

Windows Presentation Foundation

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 14
    Points : 7
    Points
    7
    Par défaut Listbox et items.refresh()
    Bonjour à tous,

    Je commence le wpf depuis peu et je retrouve confronté a un problème.

    J'ai une listbox bindée avec une classe static qui récupère les données dans une base (avec linQ). Le bind se passe bien au début, par contre si je veux rafraichir ma listbox la fonction list.Items.refresh() ne fonctionne pas...

    La solution que j'ai trouve est de redefinir le datacontext avec list.datacontext = classStatic.listerDonneesBD() mais je ne pense pas que cela soit très propre ...

    Apres 1h de test j'obtiens cela :
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.ComponentModel;
     
    namespace WpfCine
    {
        class toto
        {
            public string str{ get; set;}
        }
     
        class testlist
        {
            /* Fonctionne */
            private static List<toto> _lst1;
            public static List<toto> lst1()
            {
                if (_lst1 == null)
                {
                    _lst1 = new List<toto>();
                    _lst1.Add(new toto() { str = "TEST1" });
                    _lst1.Add(new toto() { str = "TEST2" });
                    _lst1.Add(new toto() { str = "TEST3" });
                }
                return _lst1;
            }
     
            public static void add(string st)
            {
                _lst1.Add(new toto() { str = st });
            }
     
            /* ne Fonctionne pas */
            public static int nb = 5;
            public static List<toto> list2()
            {
                var res = new List<toto>();
                for (int i = 0; i < nb; i++)
                    res.Add(new toto() { str = i.ToString() });
                return res;
            }   
        }
    }
    Si je bind avec lst1() cela marche parfaitement par contre si je bind avec list2() et que j'incrémente nb le refresh ne fonctionne pas...

    Quelqu'un voudrait-il m'expliquer se phénomène s'il vous plait ?

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 311
    Points : 337
    Points
    337
    Par défaut
    Je pense qu'il faut que tu regardes du côté de l'interface IObservable (de mémoire)

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 203
    Points : 220
    Points
    220
    Par défaut
    Si tu veux que ça fonctionne il faut que la liste soit une ObservableCollection.
    Par contre , je ne comprends pas :
    Si je bind avec lst1() cela marche parfaitement par contre si je bind avec list2() et que j'incrémente nb le refresh ne fonctionne pas...
    normalement il faudrait ce binder sur des accesseurs, faire une classe du style

    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
     class testlist
        {
     
            public  ObservableCollection<toto> lst1
            {
    			get;
    			set;
            }
     
    	  public  ObservableCollection<toto> lst2
            {
    			get;
    			set;
            }
     }

  4. #4
    Futur Membre du Club
    Inscrit en
    Février 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Merci de vos réponses

    J'ai pu prendre un peu de recule du temps de midi et je viens de trouver le problème.

    On peut se binder sur un accesseur ou le résultat d'une fonction par contre si on se bind sur une fonction elle n'est pas rappelé quand on fait un refresh!

    Il doit surement garder en mémoire l'adresse de la liste que lui retourne la fonction la première fois, et dans lst2() je crée à chaque fois une nouvelle liste il ne la prend pas en compte...

    Si quelqu'un pouvait confirmer ce que j'annonce ^^

  5. #5
    Futur Membre du Club
    Inscrit en
    Février 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Désolé je n'avais pas compris l'utilité de ObservableCollection

    Avec cela plus besoin de faire de refresh merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] ListBox "tri" items
    Par TheAntoine17 dans le forum VB.NET
    Réponses: 7
    Dernier message: 20/06/2012, 19h42
  2. ListBox et Items
    Par amine008 dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 10/01/2011, 12h11
  3. Databinding ListBox un Item en plus
    Par rdh123 dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 11/08/2010, 13h10
  4. Listbox get item sélectionné
    Par ancrou dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 18/06/2007, 22h05
  5. Drag & Drop entre 2 listBox : transfert items
    Par netah25 dans le forum C++Builder
    Réponses: 2
    Dernier message: 09/01/2006, 10h56

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