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 :

Binding d'un comboBox avec une classe


Sujet :

Windows Presentation Foundation

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 73
    Points : 59
    Points
    59
    Par défaut Binding d'un comboBox avec une classe
    Bonjour à tous!

    Dans le cadre de ma formation j'attaque un exercice sur le binding d'un combobox avec une classe héritée de Ilist

    Voici déjà le code

    Class Régions

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace Wpf_006_ListesDeroulDynamBinding
    {
        class Regions : List<Region>
        {
            private Region[] _lesRegions;
            private int _nbRegion=2;
     
            public Regions()
            {
                _lesRegions = new Region[_nbRegion];
                this.remplir();
            }
     
            private void remplir()
            {
                Region Region1 = new Region(8, "RH", "Rhones-Alpes");
     
                Region1[0] = 1;
                Region1[1] = 7;
                Region1[2] = 26;
                Region1[3] = 38;
                Region1[4] = 42;
                Region1[5] = 69;
                Region1[6] = 73;
                Region1[7] = 74;
     
                Region Region2 = new Region(5, "P", "Picardie");
     
                Region2[0] = 14;
                Region2[1] = 27;
                Region2[2] = 50;
                Region2[3] = 61;
                Region2[4] = 76;
     
                this._lesRegions[0] = Region1;
                this._lesRegions[1] = Region2;
            }
     
            public Region this[int i]
            {
                get
                {
                    if ((i < this.NbRegions) && (i >= 0))
                    {
                        return this._lesRegions[i];
                    }
                    else
                    {
                        throw new Exception("indice de region invalide");
                    }
                }
            }
     
            public int NbRegions
            {
                get { return this._lesRegions.Length; }
            }
        }
    }
    Fichier Principal

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
     
    namespace Wpf_006_ListesDeroulDynamBinding
    {
        /// <summary>
        /// Logique d'interaction pour MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            private Regions rs;
     
            public MainWindow()
            {
                InitializeComponent();
                rs = new Regions();
            }
     
     
     
            private void Window_Loaded(object sender, RoutedEventArgs e)
            {
                // LA donnée source "rs" doit être collection
     
                //Binding par XAML
                this.cbRegion.DataContext = this.rs;
     
                ////Binding par code
                //Binding bind = new Binding();
                //bind.Source = rs;
                //bind.Mode = BindingMode.OneWay;
     
                //Définition de ma property à afficher dans la combo
                cbRegion.DisplayMemberPath = "Nom";
            }
     
            private void Quitter_Click(object sender, RoutedEventArgs e)
            {
                Application.Current.Shutdown();
            }
        }
    }
    Modif du XAML comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <ComboBox ItemsSource="{Binding Path=.}" Height="23" HorizontalAlignment="Left" Margin="110,42,0,0" Name="cbRegion" VerticalAlignment="Top" Width="297" />
    Avant de poster ce message j' ai testé le binding par code (code quoté) mais aucun des deux ne fonctionne. le combobox est vide.



    y a il un morceau de code ou un paramètre oublié dans mon code??



    merci d'avance

  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 : 49
    Localisation : Belgique

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

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 570
    Points
    3 570
    Par défaut
    Et si tu enlèves le Itemsource en xaml et change la ligne ou tu mets le Dataconext dans le code par :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.cbRegion.ItemSource = this.rs;

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 81
    Points : 136
    Points
    136
    Par défaut
    A partir du moment où tu appliques ta liste au DataContext de ton contrôle, tu peux y accéder directement comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <ComboBox ItemsSource="{Binding}" Height="23" HorizontalAlignment="Left" Margin="110,42,0,0" Name="cbRegion" VerticalAlignment="Top" Width="297" />

Discussions similaires

  1. [Débutant] Binding avec une class
    Par morgan_2956 dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 31/12/2012, 11h45
  2. C#/Xaml Binding avec une classe hérité de UserControl
    Par yupa dans le forum Développement Windows
    Réponses: 1
    Dernier message: 26/06/2012, 14h46
  3. MVVM Problème de binding avec une class Business
    Par Oberown dans le forum Windows Presentation Foundation
    Réponses: 7
    Dernier message: 15/02/2012, 10h12
  4. [WPF] Problème de binding avec une classe perso
    Par JuTs dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 12/04/2010, 18h45
  5. PB de chargement de combobox avec une requete
    Par bubu1905 dans le forum Bases de données
    Réponses: 9
    Dernier message: 23/03/2005, 16h14

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