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 :

[XAML] Binding de plusieurs ComboBox dans une ListBox


Sujet :

Windows Presentation Foundation

  1. #1
    Membre habitué Avatar de thelpi
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 217
    Points : 156
    Points
    156
    Par défaut [XAML] Binding de plusieurs ComboBox dans une ListBox
    Bonjour tout le monde,

    je débute en WPF et je ne maitrise pas encore très bien les subtilités du binding.

    Voila le contexte:
    j'ai 2 bases de données contenant des moyens de paiements, du genre:
    1- Chèque
    2- Espèces
    3- CB
    dans la première base

    1- CB
    2- Chèque
    3- Espèce
    dans la seconde

    je souhaite que mon interface m'affiche une liste des moyens de paiement de la table A, et en face de chaque, une combobox des moyens de paiement de la liste B, afin que l'utilisateur fasse la correspondance entre les 2.

    Pour le moment, voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    public class Payment
        {
            private int id;
            private string name;
     
            public string Name
            {
                get { return name; }
                set { name = value; }
            }
            public int Id
            {
                get { return id; }
            }
     
            public Payment(int idp, string namep)
            {
                this.id = idp;
                this.name = namep;
            }
     
            public class Payments : ObservableCollection<Payment> {}
        }
    note: à priori l'accesseur set sur le nom est inutile, mais sans lui le reste me génère une erreur.

    je récupère le contenu de mes 2 tables de moyens de paiement dans 2 liste listA et listB et j'effectue ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ObjectDataProvider odpPayA = this.FindResource("odpPayA ") as ObjectDataProvider;
                if (odpPayA != null)
                    odpPayA .ObjectInstance = listA ;
    puis la même chose en remplaçant tout les A par des B

    et enfin voici mon code XAML:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <ObjectDataProvider x:Key="odpPayA" />
    <ObjectDataProvider x:Key="odpPayB" />
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <ListBox x:Name="lbPaymentA" DataContext="{Binding Source={StaticResource odpPayA}}" ItemsSource="{Binding}">
                                <ListBox.ItemTemplate>
                                    <DataTemplate>
                                        <StackPanel Orientation="Horizontal">
                                            <TextBlock Text="{Binding Path=Name}" />
                                            <ComboBox Text="{Binding Path=Name}" ItemsSource="{Binding Source={StaticResource odpPayB}}" />
                                        </StackPanel>
                                    </DataTemplate>
                                </ListBox.ItemTemplate>
                            </ListBox>
    Avec ce code, j'obtient bien d'un coté la liste des moyens de paiement A, mais chaque ComboBox correspondante contient "NomDeMonNameSpace.Payment" à la place des moyens de paiement B, et quand je sélectionne un élément de la combobox, le texte du moyen de paiement A est remplacé par le texte de la combobox...

    Toute idée sera la bienvenue!

    merci d'avance...

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par thelpi Voir le message
    Avec ce code, j'obtient bien d'un coté la liste des moyens de paiement A, mais chaque ComboBox correspondante contient "NomDeMonNameSpace.Payment" à la place des moyens de paiement B
    Parce qu'il te faut utiliser un DataTemplate (sur la propriété ItemTemplate) de ta ComboBox.

  3. #3
    Membre habitué Avatar de thelpi
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 217
    Points : 156
    Points
    156
    Par défaut
    j'ai remplacé la ligne du ComboBox par ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <ComboBox Text="{Binding Path=Name}" ItemsSource="{Binding Source={StaticResource odpPayB}}">
                                                <ComboBox.ItemTemplate>
                                                    <DataTemplate>
     
                                                    </DataTemplate>
                                                </ComboBox.ItemTemplate>
                                            </ComboBox>
    mais je n'ai pas la moindre idée de ce que je doit mettre dans le DataTemplate désormais... (en l'état, la combobox est vide, à la place des "NomDeMonNameSpace.Payment")

    Merci pour ta réponse en tout cas.

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Essaye ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <ComboBox Text="{Binding Path=Name}" ItemsSource="{Binding Source={StaticResource odpPayB}}">
                                                <ComboBox.ItemTemplate>
                                                    <DataTemplate>
                                                        <ComboBoxItem Content="{Binding Name}" />
                                                    </DataTemplate>
                                                </ComboBox.ItemTemplate>
                                            </ComboBox>

  5. #5
    Membre habitué Avatar de thelpi
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 217
    Points : 156
    Points
    156
    Par défaut
    Merci! J'ai bien ma liste de moyens de paiement B dans chaque ComboBox.

    Par contre quand j'en sélectionné un, j'ai toujours le même problème: la Textbox placé en vis-à-vis, contenant le moyen de paiement A, est remplacé par la valeur que j'ai sélectionné dans la ComboBox

  6. #6
    Membre habitué Avatar de thelpi
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 217
    Points : 156
    Points
    156
    Par défaut
    Je retire ce que j'ai dit, il fallait supprimer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Text="{Binding Path=Name}"
    dans la TextBox, désormais tout marche parfaitement!

    Un grand merci à toi!

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

Discussions similaires

  1. Insérer le texte d'une ComboBox dans une ListBox
    Par PascGuil dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 23/07/2007, 20h56
  2. Sélectionner plusieurs items dans une listbox
    Par ancrou dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 13/07/2007, 20h28
  3. Selectionner plusieurs elements dans une ListBox
    Par kacedda dans le forum MFC
    Réponses: 2
    Dernier message: 01/03/2007, 09h27
  4. Afficher plusieurs colonnes dans une ListBox
    Par codial dans le forum Bases de données
    Réponses: 11
    Dernier message: 23/01/2007, 13h48
  5. Afficher plusieurs champs dans une listbox
    Par fabien.benard dans le forum IHM
    Réponses: 2
    Dernier message: 14/11/2006, 17h37

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