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 :

MVVM ListeBox Scroll


Sujet :

Windows Presentation Foundation

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 137
    Par défaut MVVM ListeBox Scroll
    Bonjour,

    Une simple liste box avec une observablecollection en ItemSource

    Dans le ViewModel, j'effectue

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int idx = Nodes.IndexOf(selectedAction);
                if (idx < Nodes.Count-1)
                {
                    Nodes.Move(idx, idx + 1);
                }
    Ce qui permet de modifie l'ordre.

    Mais hélas , le scroll ne suit pas le mouvement. Si je descend un élement, à un moment il disparait car le scroll ne se fait pas.

    Comment faire et où ? Dans le viewmodel ou dans le codebehind

    Merci

    Gridin

  2. #2
    Membre émérite Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Par défaut
    Hello,

    Je ne sais pas si cela fonctionne mais peut être que oui :
    1. Tu obtiens la CollectionView associée à ta collection,
    2. Tu mets comme item courant l'élément que tu déplaces,
    3. Eventuellement, tu mets IsSyncrhonizedWithCurrentItem à true sur la listbox


    Bon courage,

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 137
    Par défaut
    Le déplacement fonctionne bien mais c'est la scroll bar vertical de la listview qui ne bouge pas quand l'élement sélectionné sort de la partie visible de la liste

  4. #4
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Depuis ton ViewModel, tu peux essayer d'envoyer un message qui sera intercepter par le code behind de ta vue, et qui fera le scroll

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 137
    Par défaut
    Là j'aurai besoin d'un peu de code svp

  6. #6
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161

  7. #7
    Membre émérite Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Par défaut
    Citation Envoyé par gridin Voir le message
    Le déplacement fonctionne bien mais c'est la scroll bar vertical de la listview qui ne bouge pas quand l'élement sélectionné sort de la partie visible de la liste
    Effectivement ma solution ne marche pas. Tu as une autre solution qui utilise une attached Property la : http://michlg.wordpress.com/2010/01/...tem-into-view/

    Sinon, pour te passer du messenger, avec le système évenementiel tu peux t'abonner au changement de sélection de la listbox (en faisant bien attention de mettre IsSynchronizedWithCurrentItem à true et en utilisant le code donné dans mon précédent message) et utiliser ce bout de code :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
     listBox1.ScrollIntoView(listBox1.SelectedValue);

  8. #8
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 137
    Par défaut
    Le

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    listBox1.ScrollIntoView(listBox1.SelectedValue);
    ne fonctionne pas. A mon avis c'est par ce que la "SelectedValue" ne change pas. Il se déplace.

    Pour l'autre solution, je vais regarder? Je ne connais pas les extenderds.

    J'ai aussi changé ma listbox ne listview, j'adapterais

  9. #9
    Membre émérite Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Par défaut
    Citation Envoyé par gridin Voir le message
    Le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    listBox1.ScrollIntoView(listBox1.SelectedValue);
    ne fonctionne pas. A mon avis c'est par ce que la "SelectedValue" ne change pas. Il se déplace.
    Oui, il faut utiliser la méthode que je t'ai donnée avant :
    1. Tu récupère la CollectionView avec la collectionViewSource,
    2. Tu settes comme élément courant de la collectionView l'élément que tu déplaces,
    3. Tu mets IsSyncronisedWithCurrentItem à True sur ta ListBox
    4. Tu t'abonnes à SelectionChanged de la listbox
    5. Dans le handle de SelectionChanged, tu utilises "listBox1.ScrollIntoView(listBox1.SelectedValue);"


    Cela t'évites de mettre en place un "Messenger" un peu plus lourd (à mettre en place ET maintenir).

    Bon courage,

Discussions similaires

  1. Scroll bar event Treeview et alignement listebox
    Par smith25 dans le forum VB.NET
    Réponses: 3
    Dernier message: 12/02/2015, 14h55
  2. manipuler 2 listebox par un seul widget scroll
    Par houma2001 dans le forum Tkinter
    Réponses: 2
    Dernier message: 15/08/2012, 18h13
  3. le fameux scrolling
    Par tanmieu dans le forum DirectX
    Réponses: 4
    Dernier message: 27/05/2003, 23h25
  4. scrolling vertical et horizontal
    Par myriam dans le forum MFC
    Réponses: 2
    Dernier message: 24/01/2003, 17h06
  5. scroll dans un label
    Par Pretender dans le forum Composants VCL
    Réponses: 9
    Dernier message: 27/09/2002, 17h06

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