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 :

binder une combo sur une list ou une autre


Sujet :

Windows Presentation Foundation

  1. #1
    Membre actif Avatar de chris81
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 626
    Points : 298
    Points
    298
    Par défaut binder une combo sur une list ou une autre
    je m'explique

    j'ai un objet voiture. Sur ma form j'ai un listview, un treeview contenant une liste de voiture et une combo contenant les marques.

    odpCouleur = ObjectDataProvider contenant les couleurs

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <GridViewColumn Header="{x:Static MyTool:Localisation.Agregation}" Width="150" >
      <GridViewColumn.CellTemplate>
        <DataTemplate>
          <StackPanel>
            <ComboBox x:Name="cbCouleur" 
                            HorizontalAlignment="Center" 
                            ItemsSource="{Binding Source={StaticResource odpCouleur}}"
                            SelectedItem="{Binding Path=CoffreType, Mode=TwoWay}" 
                            SelectionChanged="cbCouleur_SelectionChanged"/>
          </StackPanel>
        </DataTemplate>
      </GridViewColumn.CellTemplate>


    sur ma form j'ai une liste de voiture dans un treeview, qd je clique dessus elle s'ajoute au listview. J'aimerai que qd je change la marque de ma voiture j'aimerais que la liste des couleurs se remplissent suivant une liste de couleur autorisé pour une marque. La difficulté est que cela doit se faire pour toutes les voitures qui sont de la même marque.

    auriez vous une solution? merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Il faudrait nous en dire un peu plus sur le modèle de données... on ne peut pas deviner comment accéder aux couleurs autorisées pour la marque (ni même à la marque d'ailleurs)

  3. #3
    Membre actif Avatar de chris81
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 626
    Points : 298
    Points
    298
    Par défaut
    J'ai un objet Marque avec une prop static

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static List<Marque> GetMarqueList { get { return new List<Marque>() { Renault,Peugeot }; } }
    Ma combo des marques est remplies avec un odp qui recupere cette liste.

    Créer 1 liste de couleur autorise par marque. Mais dois je créer un objectdataProvider sur chacun ? et comment dire à ma combo de se remplir avec l'un ou l'autre.

    Merci

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par chris81 Voir le message
    Créer 1 liste de couleur autorise par marque. Mais dois je créer un objectdataProvider sur chacun ? et comment dire à ma combo de se remplir avec l'un ou l'autre.
    Si la liste des couleurs est une propriété de la marque (disons Couleurs), pas besoin de créer un ObjectDataProvider, tu peux te binder directement sur la liste de couleurs de la marque sélectionnée. Par exemple, si le combo des marques s'appelle comboMarques, tu peux faire ça :

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            <ComboBox x:Name="cbCouleur" 
                            HorizontalAlignment="Center" 
                            ItemsSource="{Binding Path=SelectedItem.Couleurs, ElementName=comboMarques}"
                            SelectedItem="{Binding Path=CoffreType, Mode=TwoWay}" 
                            SelectionChanged="cbCouleur_SelectionChanged"/>

  5. #5
    Membre actif Avatar de chris81
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 626
    Points : 298
    Points
    298
    Par défaut
    Bonjour,
    je t'ai mis un exemple.
    Qd je change une marque la liste des couleurs ne change pas.
    Fichiers attachés Fichiers attachés

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    A mon avis c'est ton SelectedValue="nom" qui fout la zone...
    Il faut mettre DisplayMemberPath="nom" à la place

  7. #7
    Membre actif Avatar de chris81
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 626
    Points : 298
    Points
    298
    Par défaut
    Lu,
    merci pour la réponse à 2h36 du mat mais tu dors defois !!!!

    Sinon je te remet un nouveau zip avec le displaymember et j'ai implementer le INotifyPropertyChanged sur les voitures , et j'ai remplacé les list par des ObservableCollections.

    Ce que je souhaite c'est quand je change la marque, la voiture sélectionnée ds le listview a sa liste des couleurs qui se mette à jour.

    j'ai cette erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Windows.Data Error: 39 : BindingExpression path error: 'nomCouleur' property not found on 'object' ''Voiturette' (HashCode=16450100)'. BindingExpression:Path=nomCouleur; DataItem='Voiturette' (HashCode=16450100); target element is 'ComboBox' (Name='cbCouleur'); target property is 'DisplayMemberPath' (type 'String')
    En fait ce qu'il faudrait c'est que la liste soit binder sur le <TextBlock x:Name="tbMarque"/>

    merci, ++
    Fichiers attachés Fichiers attachés

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par chris81 Voir le message
    merci pour la réponse à 2h36 du mat mais tu dors defois !!!!
    ça m'arrive... mais à 2h36, rarement

    Citation Envoyé par chris81 Voir le message
    j'ai cette erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Windows.Data Error: 39 : BindingExpression path error: 'nomCouleur' property not found on 'object' ''Voiturette' (HashCode=16450100)'. BindingExpression:Path=nomCouleur; DataItem='Voiturette' (HashCode=16450100); target element is 'ComboBox' (Name='cbCouleur'); target property is 'DisplayMemberPath' (type 'String')
    Ca marche très bien si tu fais comme j'ai dit
    Il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DisplayMemberPath="nomCouleur"
    et non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DisplayMemberPath="{Binding Path=nomCouleur}"
    C'est la seule chose que j'ai modifiée, et ça fonctionne

  9. #9
    Membre actif Avatar de chris81
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 626
    Points : 298
    Points
    298
    Par défaut
    Re,
    non ca ne marche pas. Toutes les listes se mette à jour au changement du SelectedItem de cbMarque et non pas seulement l'element selectionné dans le listview.

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par chris81 Voir le message
    Re,
    non ca ne marche pas. Toutes les listes se mette à jour au changement du SelectedItem de cbMarque et non pas seulement l'element selectionné dans le listview.
    Ah ok, j'avais pas bien compris ce que tu voulais
    Ben c'est encore plus simple alors :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    <ComboBox x:Name="cbCouleur" DisplayMemberPath="nomCouleur" ItemsSource="{Binding marque.Couleurs}"/>

  11. #11
    Membre actif Avatar de chris81
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 626
    Points : 298
    Points
    298
    Par défaut
    Ben bravo !!!

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 10/01/2014, 11h13
  2. Binder une comboBox sur la propriété d'une liste d'objet
    Par zouuc dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 04/11/2010, 16h33
  3. Comment positionner une combo sur un élément choisi ?
    Par RomainVALERI dans le forum WebDev
    Réponses: 4
    Dernier message: 25/06/2008, 11h16
  4. Réponses: 6
    Dernier message: 17/07/2006, 13h56
  5. Syntaxe pour une recherche sur 2 listes déroutantes
    Par christ-94 dans le forum Access
    Réponses: 2
    Dernier message: 24/05/2006, 17h51

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