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 :

Combobox multiple source?


Sujet :

Windows Presentation Foundation

  1. #1
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 28
    Par défaut Combobox multiple source?
    Salut à tous,
    J'ai un problème avec mon combobox.
    En effet, je dispose d'un comboBox dont les éléments sont bindé à un fichier XML, d'un autre coté ce combobox fait partie d'une relation master, details. donc en sélectionnant un élément dans la vue maitre, le combobox (élément de la vue détail) devrait contenir les données relatives à cet élément de la vue maitre.
    J'ai pensé au multiple binding, mais après les lectures que j'ai faite, je ne pense pas que ça puisse résoudre mon problème.

  2. #2
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Pourrais-tu préciser comment est alimentée en données ta partie maître ?
    Plus précisément qu'est-ce qui est data-bindé et vers quel control.

  3. #3
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 28
    Par défaut
    Ma partie maitre est constitué d'un treeView bindé à ma classe ItemsViewModel.
    en séléctionnant un Item, les données qui lui sont relatives sont affichées dans la vue détail. Parmi Ces données le contenu du comboBox, qui lui aussi est bindé à un fichier xml

  4. #4
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Et comment fais-tu le binding au niveau de ta combo-box ?
    Quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... DataContext="{Binding SelectedItem,ElementName=myTreeView}" ItemsSource="{Binding DataAsXml}" ...
    ?

  5. #5
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 28
    Par défaut
    En fait voilà mon binding XML:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <ComboBox  ItemsSource="{Binding}">
                    <ComboBox.DataContext>
                        <XmlDataProvider Source="d:\testt.xml" XPath="menudata/entities/entity/attribute::name" >
     
                        </XmlDataProvider>
                    </ComboBox.DataContext>
    Pour le binding Maitre Details, j'utilise un dataContexte pour tout le usercontrol, qui prend l'élément sélectionné, puis je précise pour chaque champ la propriété dont j'ai besoin.
    Sauf que pour le combobox je ne peux pas utiliser deux datacontext différents

  6. #6
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Et la combo-box est le seul élément de ton "UserControl" dont le binding ne fonctionne pas ou bien est-ce aussi le cas pour les autres controls ?
    En principe le "DataContext" du "UserControl" sera hérité par ta combo-box.
    N'appliquerais-tu pas un autre "DataContext" au sein de ton "UserControl" à tout hasard ?

    J'imagine que tu as de bonnes raisons professionnelles de ne pas poster plus de code mais cela serait vraiment utile de disposer du code Xaml du "UserControl", du moins la portion où se trouve la combo, et du code-behind qui la manipule si c'est le cas.

  7. #7
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 28
    Par défaut
    En fait le binding Maitre Details marche pour tous les autres champs.
    Par exemple Pour ce textBox ca marche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    <UserControl ......
     DataContext="{Binding Source={StaticResource Locator}, Path=ViewModelPropertyMenu.SelectedItem}">
     
    ....
     <TextBox x:Name="TLabel"  Text="{Binding Path=Label, Mode=TwoWay}"/>
    J'ai déjà posté le binding que j'ai fait pour la combobox, à partir du fichier xml.
    Mon problème est que je n'arrive pas à inclure un second binding au ComboBox à partir de la vue Maitre (comme je l'ai fait pour les autres champs).

    En d'autres termes, je voudrais que les éléments de mon ComboBox, contiennent des éléments à partir de mon fichier XML, mais quand je sélectionne un élément de mon TreeView (se trouvant dans ma vue maitre) le contenu de mon combobox soit relatif à l'élément sélectionné.

    J'espère que c'est plus clair maintenant.

    PS:Je n'ai pas utilisé de code behind

  8. #8
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Dans ce cas si tu as deux logiques d'alimentation en données différentes il te faudra affecter l'ItemsSource conditionnellement, et là le plus simple serait de passer par du code-behind.

    Sinon une autre solution serait d'utiliser deux ComboBox superposées et de gérer leur visibilité en fonction de la disponibilité du SelectedItem du TreeView :
    - au début seule la ComboBox alimentée par le fichier serait visible,
    - puis une fois qu'un élément du TreeView serait sélectionnés ça serait la seconde, qui elle est alimentée par le SelectedItem.

    Pour la superposition tu peux placer les deux ComboBox dans une Grid mono-cellule.
    Pour la visibilité, si tu veux éviter du code behind, tu peux utiliser un IValueConverter qui renverrait Visibility.Collapsed ou Visibility.Visible selon qu'un objet est null ou pas.
    Cet objet serait dans ton cas le SelectedItem du TreeView.

  9. #9
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 28
    Par défaut
    Merci Seriousme pour l'idée.
    Je pourrais peut être aussi modifier le dataContext de mon ComboBox par rapport à la selection dans mon TreeView.
    Je vais faire mes essais et poster, ce que je parviendrais à faire.

  10. #10
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 28
    Par défaut
    Salut,
    J'ai trouvé, et sans passer par du code behind.
    Il suffit de binder l'itemsSource à mon fichier XML, et la SelectedValue à l'élément séléctionné dans ma vue maitre.
    Un bout de code pour faire plus clair:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <ComboBox x:Name="TCN" ItemsSource="{Binding}"
                            SelectedValue="{Binding Source={StaticResource Locator}, Path=ViewModelPropertyMenu.SelectedItem.ClN}">
                    <ComboBox.DataContext>
                        <XmlDataProvider Source="d:\testt.xml" XPath="menudata/entities/entity/attribute::name" >
     
                        </XmlDataProvider>
                    </ComboBox.DataContext>
    C'est beaucoup plus simple que ça ne parait.
    WPF c'est génial non??

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

Discussions similaires

  1. Restauration de base de données avec multiple sources
    Par Elwe31 dans le forum Administration
    Réponses: 2
    Dernier message: 25/08/2013, 08h52
  2. Remplissage combobox multiples
    Par sdispro dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 27/08/2012, 11h43
  3. Remplir un combobox multiple à partir d'un combobox normal
    Par nicekiller dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/03/2011, 10h24
  4. Combobox multiples pour base de données
    Par zeb33 dans le forum Excel
    Réponses: 3
    Dernier message: 31/07/2008, 07h53
  5. Réponses: 13
    Dernier message: 21/11/2007, 15h41

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