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 Phone .NET Discussion :

[WP7][MVVM] Modification du SelectedItem du ListBox


Sujet :

Windows Phone .NET

  1. #1
    Membre expérimenté Avatar de DotNET74
    Homme Profil pro
    Watch R&D Engineer & Apprenti .NET
    Inscrit en
    Août 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Watch R&D Engineer & Apprenti .NET

    Informations forums :
    Inscription : Août 2003
    Messages : 1 986
    Points : 1 453
    Points
    1 453
    Par défaut [WP7][MVVM] Modification du SelectedItem du ListBox
    Hello,

    Alors, j'ai un MainPage qui possède un ListBox qui est Bindé par une ObservableCollection d'objets CaMePrendLeChoux ayant une propriété Name.

    Le ViewModel de la MainPage a aussi une propriété SelectedItem de type CaMePrendLeChoux.

    Je souhaite modifier l'objet sélectionné via une Page qui possède une TextBox qui est bindé sur la propriété de son ViewModel correspondant.

    Cette propriété est comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public String Toto {get{return ViewModelLocator.MainStatic.SelectedItem.Name;}}
    Donc lorsque je séletionne un élément de ma ListBox et que je navigue vers la page de modification j'ai bien la valeur correspondante dans mon TextBox.

    Ma TextBox se bind en mode twoway sur le propriété Toto.

    et je pensais qu'en modifiant la valeur de la textbox le SeletedItem se mettrait à jour tout seul !

    mais il n'en est rien !!
    La Théorie c'est quand on comprends tout mais que rien ne fonctionne.
    La Pratique c'est quand tout fonctionne mais qu'on ne sait pas pourquoi !

    Si vous aimez ma réponse, cliquez sur la main verte Merci

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Tu ne peux pas faire de TwoWay sur Toto: elle n'a pas de setter

  3. #3
    Membre expérimenté Avatar de DotNET74
    Homme Profil pro
    Watch R&D Engineer & Apprenti .NET
    Inscrit en
    Août 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Watch R&D Engineer & Apprenti .NET

    Informations forums :
    Inscription : Août 2003
    Messages : 1 986
    Points : 1 453
    Points
    1 453
    Par défaut
    En fait, j'ai ajouté TwoWay car la valeur de Name ne s'affichait pas dans ma TextBox !

    et je me suis inspiré de l'article "Bien commencé...." qui utilise une propriété SelectedItem.
    La Théorie c'est quand on comprends tout mais que rien ne fonctionne.
    La Pratique c'est quand tout fonctionne mais qu'on ne sait pas pourquoi !

    Si vous aimez ma réponse, cliquez sur la main verte Merci

  4. #4
    Membre averti

    Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 42
    Points : 431
    Points
    431
    Par défaut
    Salut,

    je ne suis pas sûr de bien comprendre ta question.
    Tu as une ObservableCollection<T> qui est bindée sur une ListBox ainsi qu'une propriété de ton ViewModel bindée sur le SelectedItem de cette même liste.

    la textbox qui affiche une propriété de l'objet bindée via le SelectedItem est en TwoWay, mais quand tu l'as modifie ta ListBox ne se met pas à jour.

    c'est bien ça ?

    A mon avis, ta propriété SelectedItem n'a plus de rapport avec ta collection, c'est un objet à part, tu peux donc le modifier mais les changements ne se feront que sur ton objet SelectedItem et non sur l'objet correspondant que SelectedItem dans ton ObservableCollection<T>

    Aymeric
    Microsoft Student Partner

    Mon Blog technique - Mon blog Developpez

  5. #5
    Membre expérimenté Avatar de DotNET74
    Homme Profil pro
    Watch R&D Engineer & Apprenti .NET
    Inscrit en
    Août 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Watch R&D Engineer & Apprenti .NET

    Informations forums :
    Inscription : Août 2003
    Messages : 1 986
    Points : 1 453
    Points
    1 453
    Par défaut
    Salut,

    oui c'est ça en fait je me suis inspiré de ton tuto en pensant que la propriété SelectedItem était reliée au ListBox !

    Mais ça ne fonctionne pas....
    La Théorie c'est quand on comprends tout mais que rien ne fonctionne.
    La Pratique c'est quand tout fonctionne mais qu'on ne sait pas pourquoi !

    Si vous aimez ma réponse, cliquez sur la main verte Merci

  6. #6
    Membre averti

    Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 42
    Points : 431
    Points
    431
    Par défaut
    dans mon article je ne souhaite pas modifier la liste.

    à chaud comme ça, je te propose de récupérer ton objet via le SelectedItem,
    le modifier et ensuite le replacer dans ta liste. C'est un peu contraignant mais je pense que c'est ce qu'il faut faire.

    Fais attention, si tu modifies ton ObservableCollection<T> sans faire de Add, Remove, etc... le résultat ne sera pas "raisé" par défaut.

    Bon courage
    Microsoft Student Partner

    Mon Blog technique - Mon blog Developpez

  7. #7
    Membre expérimenté Avatar de DotNET74
    Homme Profil pro
    Watch R&D Engineer & Apprenti .NET
    Inscrit en
    Août 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Watch R&D Engineer & Apprenti .NET

    Informations forums :
    Inscription : Août 2003
    Messages : 1 986
    Points : 1 453
    Points
    1 453
    Par défaut
    Bon problème résolu !

    J'ai ajouté une notification de la propriété Name sur ma classe CaMePrendLeChou !

    et ça fonctionne maintenant.

    Merci
    La Théorie c'est quand on comprends tout mais que rien ne fonctionne.
    La Pratique c'est quand tout fonctionne mais qu'on ne sait pas pourquoi !

    Si vous aimez ma réponse, cliquez sur la main verte Merci

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

Discussions similaires

  1. MVVM, Drag'n'Drop et Listbox !
    Par p1k1 dans le forum Silverlight
    Réponses: 5
    Dernier message: 26/08/2010, 14h44
  2. MVVM : Listes et SelectedItems
    Par zax-tfh dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 22/03/2009, 00h05
  3. WPF donner le selectedItem sur Listbox
    Par scapefrom dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 27/02/2009, 21h08
  4. Enregistrer modifications faites sur une listbox
    Par zeus7857 dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 13/08/2008, 10h01

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