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

Silverlight Discussion :

Faire apparaitre les éléments d'une ListBox un par un


Sujet :

Silverlight

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 29
    Par défaut Faire apparaitre les éléments d'une ListBox un par un
    Bonjour à tous ...

    Je suis en train de me lancer dans les animations de Silverlight sur les ListBox et leurs Items.

    Et il y a quelques chose que je n'arrive pas à faire ...

    En fait je voudrai que les items de ma ListBox apparaissent un par un ... peut être en jouant sur un Delay mais je ne vois pas trop comment faire (je ne sais pas vraiment non plus si c'est possible)


    Est ce que quelqu'un à une idée ?

    Merci !!

  2. #2
    Membre émérite Avatar de worm83
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Février 2010
    Messages
    459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2010
    Messages : 459
    Par défaut
    Salut,

    La solution la plus facile à mon avis est d'utiliser un converter.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 29
    Par défaut
    Un Converter .. ca me parait une drôle d'idée ! je ne vois pas trop où tu veux en venir ...

    Mais bon soit, tu penses convertir quoi ? (l'index de l'Item ?)

  4. #4
    Membre émérite Avatar de worm83
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Février 2010
    Messages
    459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2010
    Messages : 459
    Par défaut
    Non j'avoue j ai dit de la mer.... je pensais à un autre truc.

    Y a peut être une bricole à essayer, c'est d'avoir une ObservableCollection que tu remplit avec les objets de ta liste en mettant une attente entre chaque itérations.
    Mais ca doit être faisable d'une façon plus propre avec une balise de type <animation> ou <fading>

  5. #5
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Par exemple :

    Tu mets un storyboard dans ton DataItem puis dans les items de ta ListBox tu ajoutes une valeur BeginTime que tu Bindes sur la propriété BeginTime du Storyboard. Tu ajoutes un évènement Load sur le Grid principal de ton DataItem qui te permet de lancer le Storyboard (en regardant dans la ressource de celui-ci)

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 29
    Par défaut
    Ok j'ai à peu prêt suivi ton raisonnement ...

    Le truc (j'aurai peut être du le préciser plus tôt) c'est que j'utilise un Data Binding pour remplir la ListBox et je n'ai pas très envie de rajouter une variable qui concerne purement l'affichage dans mes objets !


    Il n'y aurait pas une solution un peu plus clean ?



    Merci en tout cas !

  7. #7
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    L'idée de Samoteph semble vraiment bonne et mérite d'être creusée.
    Donc, si tes objets bindés n'ont pas trop de propriétés, tu peux les wrapper dans des proxys, ayant une propriété "BeginTime", qui seront bindés sur la ListBox à la place des objets originaux.

    S'ils sont en revanche très riches, il est sans doute possible d'arriver au même résultat en utilisant la bibliothèque DynamicProxy pour générer automatiquement les proxys.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 29
    Par défaut
    Hop ...

    Bon j'ai effectivement réussi à faire quelque chose en m'appuyant sur la suggestion de Samoteph.

    Ca marche à peu prêt correctement .. il y a juste que la ListBox reload les Items qd je scroll !
    Il y a un moyen simple de l'en empêcher ?


    Sinon ton idée de "wrapper dans un proxy" soulève en moi quelques interrogations ... Qu'est ce que c'est exactement ??


    merci du coup de main ...

  9. #9
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Ca marche à peu prêt correctement .. il y a juste que la ListBox reload les Items qd je scroll !
    Il y a un moyen simple de l'en empêcher ?
    Oui mais c'est un peu compliqué... En gros il faut rajouter un évènement sur le Scrollviewer qui mettra à jour un Flag qui empechera les storyboard de démarrer si le Flag est fixé... BofBof...

  10. #10
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Sinon ton idée de "wrapper dans un proxy" soulève en moi quelques interrogations ... Qu'est ce que c'est exactement ??
    C'est un pattern assez répandu qui consiste à encapsuler un objet que tu veux "enrichir" (ici ajouter un Storyboard) dans un autre, le proxy, qui forwarde les appels aux méthodes et propriétés vers l'objet wrappé.

    Dans ton cas une solution plus simple serait de simplement créer un nouveau type en héritant de celui de tes items, et d'y ajouter une propriété correspondant au storyboard.
    Il faudra ensuite initialiser chacune de tes instances de ce type avec un de tes items.
    Le seul souci avec cette approche est qu'il n'y aura plus de synchronisation avec l'objet d'origine.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 29
    Par défaut
    Bonjour ....

    Je vais revenir à la charge sur cette histoire des items qui se reload ..
    J'ai essayé de brancher la mise à jour du flag sur l'event MouseWheel du ScrollViewer que je récupère via un GetScrollHost sur la listbox ...

    Petit soucis ca ne marche pas correctement ... en fait j'ai l'impression que je ne récupère pas le bon scrollviewer !

    Est ce que j'utilise la bonne méthode et le bon event ?




    Sinon à propos des proxys, j'ai envie de garder la synnchronisation comme tu dis, donc je vais garder la solution de Samoteph


    Merci !

  12. #12
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    J'ai essayé de brancher la mise à jour du flag sur l'event MouseWheel du ScrollViewer que je récupère via un GetScrollHost sur la listbox ...

    Petit soucis ca ne marche pas correctement ... en fait j'ai l'impression que je ne récupère pas le bon scrollviewer !
    A mon avis, il faudrait plutot que via Blend tu récupères le Template d'un ListBox puis dans le ScrollViewer tu ajoutes un évènement ScrollChanged dedans.

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

Discussions similaires

  1. [AC-2003] Parcourir les éléments d'une ListBox
    Par sash6 dans le forum IHM
    Réponses: 2
    Dernier message: 25/08/2009, 09h01
  2. Faire défiler les éléments d'une liste
    Par pepelele dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/10/2008, 14h40
  3. Trier les élément d'une ListBox
    Par gluc86 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 17/01/2008, 14h58
  4. Comment faire apparaitre des données dans une listbox
    Par nuans dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 14/05/2007, 15h04
  5. Réponses: 5
    Dernier message: 22/02/2006, 17h32

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