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 :

chargement et récupération d'objets dans un listbox


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 149
    Par défaut chargement et récupération d'objets dans un listbox
    bonjour a tous.

    j'ai une liste d'objets (List<MonObj>) où mes objets ont entre autre les propriétés Id(int) et nom(string).

    mon besoin est simple et je pense tres connu : je souhaiterai pouvoir afficher la liste des noms dans ma listbox, et récupérer l'id de celui qui aura été sélectionné.

    j'avais effectué un bind en affectant l'itemsource de ma listbox par la liste des noms, mais je peux pas récupérer les id de cette manière, et je ne trouve pas de cas similaire ou quelque chose qui puisse m'orienter dans ce sens.

    auriez vous svp une idée de comment faire une telle chose ? ou devrai je choisir un autre controle plus pratique que le listbox pour ca ? merci de vos retour.

  2. #2
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

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

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    En gros, il y a deux moyen de faire.

    Soit une classe item comme ceci :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class TheItem
    {
      public int ID { get; set; }
     
      public string Name { get; set; }
    }

    Option 1:

    Dans ton viewmodel, ou dans la classe qui donne la source du binding, ajoute unr propriété :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    private TheItem _selectedItem;
     
    public TheItem SelectedItem
    {
       get { return _selectedItem; }
       set
       {
         _selectedItem = value;
         // faire quelque chose
       }
    }

    Avec un XAML :
    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     <ListBox ItemsSource="{Binding TheList}" SelectedItem="{Binding SelectedItem}" >
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Name}"></TextBlock>
                    </DataTemplate>
                </ListBox.ItemTemplate>
    </ListBox>

    Tu peux récupérer l'ID dans le setter de SelectedItem. L'ID est value.ID.

    Option 2:
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    private int _selectedItemId;
     
    public int SelectedItemID
    {
       get { return _selectedItemId; }
       set
       {
          _selectedItemId = value;
          // faire quelque chose
       }
    }


    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     <ListBox ItemsSource="{Binding TheList}" SelectedValue="{Binding SelectedItemID}" SelectedValuePath="ID" >
                <ListBox.ItemTemplate>
                    <DataTemplate>
                       <TextBlock Text="{Binding Name}"></TextBlock>
                    </DataTemplate>
                </ListBox.ItemTemplate>
    </ListBox>

    La tu as directement l'ID dans SelectedItemID.

    A toi de voir celle que tu préfère. L'avantage de la 1ere est que tu as l'item complet, avec toutes les propriétés.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 149
    Par défaut
    Merci pour ta réponse guruu et désolé pour mon retour tardif, non pas que j'ai laissé tomber mais depuis le temps je bosse (a mon temps libre) sur ces notions de mvvm et autres, et je tente des trucs.

    j'ai cependant un peu de mal à mettre en pratique ce pattern qui semble simple et logique. j'ai réussi à faire quelque chose où j'obtiens un résultat souhaité mais je sais pas si ma façon de faire est "propre". je vais en faire un nouveau sujet puisqu'on sort du cadre de ma question. en revanche, je n'arrive pas à mettre en place la récupération de l'item (j'ai mis en place ta 1ere solution guru).
    si je comprends bien tu définis une propriété dans le vm pour y stocker le selectedItem du listbox, et tu lies cette propriété à ce dernier dans le xaml par le

    SelectedItem="{Binding SelectedItem}"
    en faisant ca je n'arrives pas à passer dans mon setter, en fait j'ai collé un point d'arret à ce niveau et je rentre jamais dedans lors du clic sur l'un des item de la listebox. ai je oublié quelque chose ? la gestion de l'évènement selectedChanged ou autre peut etre ?

    merci bien pour ton aide, ainsi qu'à tout ceux qui veulent intervenir

  4. #4
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

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

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Le datacontext est bien mis ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 149
    Par défaut
    ah non du tout, et je vois pas du tout quoi mettre dedans non + ...

  6. #6
    Membre émérite Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Par défaut
    Salut,

    Tu dois définir le contexte de données à utiliser par la vue :

    vue.Datacontext = ViewModel;

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

Discussions similaires

  1. Problème de récupération d'indice dans une listbox
    Par MarieKisSlaJoue dans le forum ASP.NET
    Réponses: 13
    Dernier message: 28/02/2013, 13h18
  2. fixer objet dans un listbox (LB_SETITEMDATA)
    Par yann458 dans le forum C++/CLI
    Réponses: 1
    Dernier message: 02/12/2011, 22h12
  3. recuperer un objet dans une listbox
    Par olibara dans le forum ASP.NET
    Réponses: 6
    Dernier message: 06/01/2010, 17h29
  4. Réponses: 0
    Dernier message: 27/03/2008, 00h18
  5. Réponses: 1
    Dernier message: 25/04/2006, 21h29

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