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

C# Discussion :

probléme du Binding d'un Combobox


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 35
    Points
    35
    Par défaut probléme du Binding d'un Combobox
    Salut à tous;
    Je suis entrain de faire mon premier combobox avec les WPF et jai du mal à faire le Binding.
    mon but est tous simplement de récupérer une liste des nom et l'afficher dans mon combobox, j'ai limpression que le binding passe c juste ke jarrive pas afficher la liste( le combobox contient autaut de nom ajouté mais au niveau d'affichage c tjrs blanc)
    voila mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     public partial class Window1 : Window
        { ObservableCollection<Login> ItemsTest = new ObservableCollection<Login>();
            public List<String> nom { get; set; }
            public Login log = new Login();
            public Window1()
            {         
               InitializeComponent(); 
               nom = log.listname();
                combo.ItemsSource = nom;          
                combo.DataContext = ItemsTest;  
            }
        }


    le code XAML correspondant :
    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
    <Window x:Class="testlogin.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        DataContext="{Binding RelativeSource={RelativeSource Self}}"
       Title="Connexion" Height="481" Width="635" ResizeMode="NoResize" ShowInTaskbar="False" WindowStartupLocation="CenterScreen">
    <Grid>
    <ComboBox Height="23" Margin="0,13,46,0" Name="combo" VerticalAlignment="Top" HorizontalAlignment="Right" Width="164" 
                       ItemsSource="{Binding Path = ItemsTest}">
                
                <ComboBox.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding name}" />
                    </DataTemplate>
                </ComboBox.ItemTemplate>
            </ComboBox>
     </ComboBox>
        </Grid>
    
    </Window>
    voila la classe qui contient la liste des noms (Name) que je veux afficher:
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    namespace testlogin
    {
        public class Login
        {
            public List<String> list{get;set;}
            public Login()
            {
                this.name = "bbbb";
                Title2 = name;
            }
         public void setname(String name)
        {
            this.name = name;
        }
          
    
    
         public String name{get;set;} 
    
         public string Title2 { get; set; }
         public List<String> listname()
         {
            list  = new List<string>();
             for (int i = 0; i < 20; i++)
             {
                 name = "aaaa";
                 list.Add(name);
                             
             }
             return list;
         }
        }
    
        
    }
    comme vous pouvez le constater jai ts déclarer public, en mettant le plus possible des get et set afin que ça soit accessible et je pourrais l'afficher mais sans progrès.
    merci pour tte aide.

    si on ne fait pas ce qu'on aime, il faut qu'on aime ce qu'on fait![^^clinoeil3]

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 97
    Points : 115
    Points
    115
    Par défaut
    Commence par virer ton "combo.ItemsSource = nom;", il ne sert à rien vu que tu redéfinis le binding dans le xaml.

    Après, tu as mis ItemsTest pour le datacontext de ton combobox, ok. Mais ensuite côté xaml tu mets "{Binding Path = ItemsTest}". Du coup, tu bind "TonDataContext.ItemsTest", autrement dit : "ItemsTest.ItemsTest". Ça ne peut donc pas marcher. Remplacer par "{Binding}" pour binder le datacontext tel quel et ça devrait marcher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <ComboBox Height="23" Margin="0,13,46,0" Name="combo" VerticalAlignment="Top" HorizontalAlignment="Right" Width="164"
    ItemsSource="{Binding}">

    Edit : oh, et n'oublie pas de mettre quelque chose dans ItemsTest avant :p

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 35
    Points
    35
    Par défaut
    tout d'abord je te remercie d'avoir lu mon Post( tellement long , sinon j'ai binder item source avec binding tout court " ItemsSource="{Binding}">" et ça change rien
    et jai viré combo.ItemsSource = nom; par contre la mon combobox devient vide parceque avant même si ya rien qui s'affiche mais jai autant de champs que de noms ajouté (je le constate avec le curseur )

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 97
    Points : 115
    Points
    115
    Par défaut
    Tu as bien pensé à remplir ItemsTest ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ItemsTest.Add(new Login());
    combo.DataContext = ItemsTest;

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 35
    Points
    35
    Par défaut
    je viens de l'essayer et ca donne rien , par contre jai aussi essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ItemsTest.Add(new Login("aaaa"));
    et la ça mafiche bien les aaaa , le probléme que il faut que je récupére une liste des noms et laficher par la suite.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 97
    Points : 115
    Points
    115
    Par défaut
    Bah c'est bon alors non ? Tu récupères ta liste de login, tu la mets dans ItemsTest, et tu l'assigne à la propriété ItemSource de ta ComboBox. Qu'est-ce qui te bloque à partir de là ?

    Petite précision : pour dire quelle propriété de ton objet afficher dans ta ComboBox, il faut que tu renseignes l'attribut "DisplayMemberPath". Par exemple pour afficher la propriété "Name" de tes Login :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <ComboBox Height="23" Margin="0,13,46,0" Name="combo" VerticalAlignment="Top" HorizontalAlignment="Right" Width="164"
    ItemsSource="{Binding}" DisplayMemberPath="Name">

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 35
    Points
    35
    Par défaut
    J'ai limpression que le vrai souci s'est au niveau de la visibilté des champs parce que quand jai fait ce que tu viens de me dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ItemsTest.Add(new Login());
               // combo.ItemsSource = nom;
                combo.DataContext = ItemsTest;
    étant donnée que le constructeur est definie comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public Login()
            {
               name = "bbbb";
              }
    mon combobox contient un seul élément au lieu de 7 quand je faisait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    combo.ItemsSource = nom;
    (parceque nom est une liste de 7 elements)
    mais le problème que textes ne s'affichent pas

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 35
    Points
    35
    Par défaut
    olaaaa ça m'énérve vraiment ce combobox
    qd j'ajoute DisplayMemberPath="Name"
    ca me donne Exception :
    La valeur 'System.Windows.DataTemplate' ne peut pas être attribuée à la propriété 'ItemTemplate' de l'objet 'System.Windows.Controls.ComboBox'. Impossible de définir à la fois DisplayMemberPath et ItemTemplate. Erreur à l'objet 'System.Windows.DataTemplate' dans le fichier de balisage 'testlogin;component/window1.xaml' ligne 29 position 19.
    Pour rappel voila mon le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <ComboBox Height="23" Margin="0,13,46,0" Name="combo" VerticalAlignment="Top" HorizontalAlignment="Right" Width="164" 
                       ItemsSource="{Binding}" DisplayMemberPath="Name">
     
               <ComboBox.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding name}" />
                    </DataTemplate>
                </ComboBox.ItemTemplate>
            </ComboBox>

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 97
    Points : 115
    Points
    115
    Par défaut
    Normal, la propriété s'appelle "name" sur ton objet, pas "Name" (attention aux majuscules).

Discussions similaires

  1. Problème de binding Combobox
    Par Arno_94 dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 07/12/2009, 13h35
  2. problème de bindings avec DropDownList
    Par Vlatiska dans le forum ASP.NET
    Réponses: 14
    Dernier message: 17/03/2007, 14h04
  3. [C#][MySQL 5.x]Problème de Binding
    Par Oufti dans le forum Windows Forms
    Réponses: 2
    Dernier message: 07/05/2006, 23h44
  4. Réponses: 6
    Dernier message: 31/03/2006, 08h01
  5. [VB6]Problème de rafraichissement d'une combobox
    Par bb62 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 27/01/2006, 16h58

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