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 + Listbox + Multiselect : Bind sur selecteditems ?


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Par défaut MVVM + Listbox + Multiselect : Bind sur selecteditems ?
    Bonjour à tous,

    Je fais face à une colle :
    J'ai un listbox dont la source est bindée, et la selection placée sur Extended (donc multiselection)

    J'aimerai pouvoir recuperer ma selection courante dans mon view model... Mais comment faire ????

    Auriez vous une idée ?
    Merci d'avance

    @ bientot

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 214
    Par défaut
    Bonne question

    La classe ListBox a bien une DependencyProperty SelectedItems mais elle est en lecture seul (donc pas moyen de l'utiliser depuis le XAML).

    Je vois plusieurs possibilités:

    • soit tu ajoutes une propriétés IsSelected aux objet VueModèle qui sont "derrière" les ListBoxItem. Tu bindes cette propriétés à la propriété IsSelected des ListBoxItem. De cette manière tu peux récupérer la selection avec qqchose comme (dans la classe VueModèle principale) this.Objects.Where(o => o.IsSelected))
    • soit tu hérites de ListBox et tu rajoutes cette fonctionnalité (peut être qu'il faudra surcharger la méthode OnSelectedChanged)

    Tiens nous au courant pour qu'on sache comme tu résoud le problème

  3. #3
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Par défaut
    J'ai posté ce message un peu en désespoir de cause car suite à mes recherche pré-post j'avais bien vu que ce n'etait pas vraiment prévu...
    Pourtant ma premiere intuition a été de créer une collectionview à partir de mon observablecollection en me disant que j'aurais un selecteditems sur le collectionview mais non, peau de zub comme dirait l'autre

    Je trouve ça incensé quand meme que ca n'existe pas de façon native.
    De plus, je trouve ça encore plus hallucinant que l'on ne puisse pas binder de property en mode OneWayToSource (ou oneWayToSource, je ne sais plus, mais en gros, un binding en sens unique, de la vue vers le view model)...

    Je ne sais pas si c'est moi qui porte un jugement trop hatif, avec un manque de connaissances ou bien si ma pensée est bien fondée mais je trouve qu'il manque pas mal de petites choses dans le framework WPF qui sont à mon sens des fonctionnalités basiques que l'on devrait obligatoirement retrouver...
    Qu'en penses tu Jerem, toi qui a l'air d'avoir pas mal d'experience sur WPF ?

  5. #5
    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
    Comme le post indiqué par Badger, je pense que le mieux, pour ce genre de scénario, est de passer par une propriété attachée (très puissant ce mécanisme, y'a pas à dire !)

    Lorsque celle-ci est modifiée, tu récupères le contrôle "parent", tu le caste en ListBox et après, tu sélectionnes les éléments qui t'intéresse.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Par défaut
    Lol j'ai pas vu le post de BadgerMan ^^
    Effectivement, j'etais tombé sur cette page pendant mes recherches. C'est une solution qui pour moi releve plus de la "bidouille" (j'ai mis des guillemets hein...) car c'est vraiment un principe de base de pouvoir recuperer les selecteditems non ? enfin je trouve ca surréaliste de devoir passer par de telles choses pour faire un truc aussi simple... Isn't it ?

    Bon en attendant je vais m'accomoder de cette solution

    Merci à vous

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 214
    Par défaut
    Effectivement, comme tu dis on pourrait s'attendre à pouvoir faire ça "directement" avec le contrôle ListBox... La solution avec un propriété attachée et assez "clean" je trouve (tu n'hérites pas de ListBox je pour ajouter ce comportement, tu ne modifies pas tes objets VueModèle...).

    Je ne sais pas si dans la prochaine version du framework les contrôles de bases seront enrichies (ça pourrait être le cas pour le ListBox par exemple). Par contre, de nombreux autres contrôles (actuellement disponible dans le WPF toolkit) devraient être intégrés ce qui est une bonne chose.

    Je pense que WPF est une techno encore "jeune", donc certaines choses peuvent manquer. La gros avantage selon moi et que tout est possible: il n'y a pratiquement pas de limite à étendre l'existant ou à inventer de nouveaux contrôles...

  8. #8
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 65
    Par défaut
    Je suis bien conscient que ce topic est vieu, mais j'ai trouvé mon bonheur grâce à lui via google alors je me suis dit que mon intervention était justifiée.

    Je m'explique :
    un bug subsiste dans le code proposé par la personne tenant ce blog, il a été signalé puis corrigé dans les commentaires.

    Ligne 103 du fichier MultiSelectorBehaviours.cs, comme il est expliqué, il faut simplement échanger les 2 paramètres passés au constructeur de TwoListSynchronizer.

    Voici la ligne corrigée (au cas où l'auteur se déciderait enfin à mettre à jour l'archive, vous évitant ainsi de créer le bug vous-même) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _synchronizer = new TwoListSynchronizer(list, GetSelectedItemsCollection(_multiSelector));
    Pour info, l'effet indésirable provoqué était que la liste des SelectedItems n'était pas rafraîchie lorsque l'objet sur lequel elle est bindée se voyait réinstancié. Il y avait peut-être d'autres conséquences que je n'ai pas personnellement remarquées.

  9. #9
    Membre éprouvé Avatar de titourock
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 156
    Par défaut
    Hello,

    Il y a également ce lien qui est fort intéressant. (il décrit une façon de construire une classe dérivée de ListCollectionView qui prend en charge la multisélection)

    http://grokys.blogspot.com/2010/07/m...-part-iii.html

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

Discussions similaires

  1. [Débutant] Listbox et binding sur fichiers XML
    Par Ikes72000 dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 14/10/2014, 16h18
  2. [Débutant] MVVM ListBox ItemSource Binding
    Par Trophonius dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 07/08/2012, 17h23
  3. [Débutant] MVVM ListBox ItemSource Binding
    Par Trophonius dans le forum VB.NET
    Réponses: 1
    Dernier message: 07/08/2012, 17h23
  4. Binding sur les SelectedItems d'une ListBox ne fonctionne pas entièrement
    Par takinelinfo dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 14/06/2011, 10h46
  5. Binding sur ListBox bloquant
    Par thelpi dans le forum Windows Presentation Foundation
    Réponses: 8
    Dernier message: 08/06/2009, 11h35

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