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 :

Rafraichissement automatique de la vue d'une ListBox


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Lelio1407
    Inscrit en
    Juillet 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 126
    Par défaut Rafraichissement automatique de la vue d'une ListBox
    Bonjour,

    Je développe un petit logiciel "Photoshop-Like".
    Je possède une vue principale (ScreenView) qui contient une ListBox bindée sur une ObservableCollection de ScreenObjectBases qui sont, soit des images, soit des textes (DataTemplate des ListBoxItems : "Image" et "TextBlock").

    Au niveau de l'affichage, je souhaite que les ListBoxItems soient affichées dans leur ordre de place dans l'ObservableCollection.

    Lorsque je rajoute des ScreenObjectBases, ma ScreenView les affiche bien les uns devant les autres.

    En revanche, si j'inserts un ScreenObjectBase, je souhaite qu'il s'affiche devant les Items précédents mais derrière ceux qui sont après lui dans l'ObservableCollection.

    Je pensais que le seul fait de "re-trier" mon ObservableCollection et le fait que ma ListBox soit bindée dessus, "re-trierai" de façon automatique l'ordre d'affichage dans ma ScreenView (Je notifie bien la propriété NotifyPropertyChanged de ObservableCollection).
    Pourtant, au niveau de ma ScreenView, le ScreenObjectBase inséré vient pourtant s'afficher devant tous les autres.

    Est-ce que quelqu'un pourrait m'éclairer sur la façon de faire pour que la vue des objets de la ListBox de ScreenView soit reconstruite dans le bon ordre à chaque fois que l'ObservableCollection est modifiée?

    Je vous remercie d'avance.

  2. #2
    Membre éclairé Avatar de koyot3
    Inscrit en
    Avril 2007
    Messages
    693
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 693
    Par défaut
    Bonjour Lelio,

    Je n'ai pas trop compris ton problèem
    A chaque ajout dans ta collection (méthode Add), l'item ajouté s'affiche en dernier.
    Quand tu inserts un élément dans ta collection à une position x, tu veux qu'il s'affiche en à la même position dans ta ListBox ?

    C'est bien cela ou bien j'ai loupé un truc ?
    Normalement la position dans la collection correspond à celle de la liste de base (méthodes Add ou Insert)

  3. #3
    Membre confirmé Avatar de Lelio1407
    Inscrit en
    Juillet 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 126
    Par défaut
    Effectivement, je ne suis pas sure d'avoir été très claire :-)
    Si je prends un exemple :
    J'ai ajouté successivement 3 ScreenObjectBase dans mon ObservableCollection:
    - ObservableCollection[0] = Image0,
    - ObservableCollection[1] = Image1,
    - ObservableCollection[2] = Texte2.

    Dans ma fenêtre de rendu (ScreenView) dont la ListBox est bindée sur mon ObservableCollection, Image0 (DataTemplate "Image") est affichée en premier, puis par dessus est affichée Image1 et en dernier, Texte2 (un TextBlock) vient s'afficher par dessus le tout (si je déplace ces éléments, ils peuvent se masquer par exemple).
    (En gros, le Z-order de l'orde de rendu des ScreenObjectBases dans la fenêtre de rendu est celui de leur place dans l'ObservableCollection.)

    Si je rajoute une image (Image2) dans mon ObservableCollection (Methode Add), j'ai bien :

    - ObservableCollection[0] = Image0,
    - ObservableCollection[1] = Image1,
    - ObservableCollection[2] = Texte2,
    - ObservableCollection[3] = Image2.
    et dans ma fenêtre de rendu, "Image2" est bien devant les 3 autres éléments.

    Maintenant, si j'insert "Image2" dans mon ObservableCollection (par exemple entre Image1" et "Text2" et après re-triage de ma collection, j'ai :

    - ObservableCollection[0] = Image0,
    - ObservableCollection[1] = Image1,
    - ObservableCollection[2] = Image2,
    - ObservableCollection[3] = Texte2.

    Mais dans ma fenêtre de rendu, "Image2" vient toujours s'afficher devant les 3 autres items alors qu'elle devrait être derrière Text2 (la TextBox représentant Text2 devrait être "masquée") par l'image de Image2.

    Après un Insert, j'ai essayé de faire un "Clear" sur l'ObservableCollection puis de la reconstruire en n'utilisant que la méthode Add mais ça ne change pas le rendu. Le dernier élément ajouté est toujours devant tous les autres alors qu'en cas d'Insert, il devrait être "entre" les autres.

    J'espère avoir été plus claire. :-)

  4. #4
    Membre éclairé Avatar de koyot3
    Inscrit en
    Avril 2007
    Messages
    693
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 693
    Par défaut
    oui donc j'avais bien compris
    c'est bizarre je n'ai pas ce comportement dans mes applis
    ma liste est syncro avec la collection (méthode Insert)

    quand tu dis
    si j'insert "Image2" dans mon ObservableCollection (par exemple entre Image1" et "Text2" et après re-triage de ma collection,
    qu'est ce que tu appelles re-triage ?
    tu es sûr que tu n'aurais pas implémenter quelque chose dans tes classes ou ailleurs qui ferait un tri pour toi (genre en premier les images et en second les textbox) ?

  5. #5
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    Bonjour,

    Pour pouvoir t'en dire plus, je pense qu'il faut que tu nous envoie des parties de ton code... La partie où tu trie ta liste, la partie du binding, la déclaration de tes propriétés bindées etc...

    Bon dév.

Discussions similaires

  1. [XL-2010] Sélectionner automatiquement 4 derniers items d'une ListBox
    Par Alasgard dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 11/06/2014, 09h32
  2. Rafraichissement automatique de la vue
    Par sylvie111 dans le forum Django
    Réponses: 1
    Dernier message: 06/07/2012, 20h03
  3. rafraichissement automatique d'une partie d'une page
    Par gloglo dans le forum Struts 1
    Réponses: 1
    Dernier message: 22/06/2006, 11h05
  4. [VBA-E]rafraichissement d'une listbox
    Par bastien62200 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/02/2006, 13h27
  5. [Tableaux] rafraichissement automatique d'une page
    Par Copps dans le forum Langage
    Réponses: 5
    Dernier message: 10/11/2005, 09h02

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