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

Silverlight Discussion :

Combobox data binding


Sujet :

Silverlight

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut Combobox data binding
    Bonjour,

    Existerait-t'il un exemple de comment "binder" un combobox ?

    Pour les datagrid, j'en trouve plein, mais pas pour les combos.

    PS: j'utilise RIA services.

    Merci

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Euh...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <ComboBox ItemsSource="{Binding Patati}" DisplayMemberPath="TaPropriete" />
    Après tu peux aussi définir ton propre template d'affichage si tu veux afficher plusieurs choses.

    C'est quoi ton soucis exactement ?

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Pour les datagrids je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ItemsSource="{Binding Data, ElementName=source}"
    et puis je lie les colonnes avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <data:DataGridTextColumn x:Name="AchDate" Header="Date" Binding="{Binding AchDate}" IsReadOnly="True" Width="50" />
    Mon souci c'est que dans ma source, j'ai plusieurs tables et que je dois lié mon combo sur un champ déterminé d'une table (AchatTbl). De plus, le champ qu'il retourne (AchId) doit être différent du champ qu'il affiche (AchNom).

    Merci pour ton aide

  4. #4
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    J'ai toujours pas compris.

    Tu peux détailler la structure de ta source stp ?

    Data c'est une liste de quoi ?
    C'est quoi la structure des objets et quel champ tu veux afficher ?

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    J'comprends pas tout, mais souvent ça marche...

    Voici ce que je mets dans mon xaml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <riaControls:DomainDataSource x:Name="source" QueryName="GetCategoriesQuery" AutoLoad="True" LoadedData="source_LoadedData" Margin="0,0,0,168" Grid.RowSpan="2">
        			<riaControls:DomainDataSource.DomainContext>
        				<domain:LaundryContext />
        			</riaControls:DomainDataSource.DomainContext>
        		</riaControls:DomainDataSource>
    Est-ce que ça t'aide ?

  6. #6
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Non ça m'aide pas

    C'est quoi le type retournée par GetCategoriesQuery ?

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Public Function GetCategoriesQuery() As System.Windows.Ria.Data.EntityQuery(Of Gentry.Web.Categorie)
    Returns an EntityQuery for query operation 'GetCategories'.

    Mon projet Web s'appelle Gentry.web mais ça, je me doute que tu le savais déjà

  8. #8
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Ca te donne quoi si tu tapes ça ?

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <ComboBox ItemsSource="{Binding Data, ElementName=source}" DisplayMemberPath="AchDate" />

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Désolé, j'avais pas vu que tu avais répondu !

    Normalement je reçois un mail, mais pas toujours, pourquoi ?...

    Non ton code ne change pas l'affichage.

    En fait je t'ai dit que dans mon XAML, je définissait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <riaControls:DomainDataSource x:Name="source" QueryName="GetCategoriesQuery" AutoLoad="True" LoadedData="source_LoadedData" Margin="0,0,0,168" Grid.RowSpan="2">
        			<riaControls:DomainDataSource.DomainContext>
        				<domain:LaundryContext />
        			</riaControls:DomainDataSource.DomainContext>
        		</riaControls:DomainDataSource>
    Il y a la dedans le
    QueryName="GetCategoriesQuery"
    qui est un query sur l'une des tables de ma source. Si je ne le mets pas, je n'ai aucunes données qui s'affichent dans mes dataGrids de ma page.

    Par contre, avec çà, je vois dans mon combobox :
    Categorie : 1
    1 étant l'identifiant de la catégorie. Quand j'ouvre le combo, toutes les catégories et identifiants sont bien présents.

    Si je change "GetCategoriesQuery" par "GetAchatsQuery", je vois bien tous mes achats.

    Je pense donc qu'il faudrait pouvoir affiner le
    ItemsSource="{Binding Data, ElementName=source}"
    par un truc du style ItemsSource="{Binding Data, ElementName=source.Achats}" mais ça ne fonctionne pas.

  10. #10
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Désolé mais je comprends toujours pas...

    Ici ton DomainDataService récupère des Catégories, tu ne pourra afficher dans ton ComboBox que des catégories.

    Si tu veux afficher des achats, ben faut créer un nouveau DomainDataService qui te retournera les Achats (via le QueryName).

    Imaginons que ta classe Category retournée par ta méthode GetCategories contiennent 2 champs : Name et Id.

    Dans ton Comboxbox tu veux afficher le Name, mais avoir l'Id en tant que valeur "derrière".

    Alors tu vas déclarer ton XAML comme ça

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <ComboBox ItemsSource="{Binding Data, ElementName=source}" ValueMemberPath="Id" DisplayMemberPath="Name" />

    D'ailleurs j'ai toujours pas compris ta comparaison avec le DataGrid...

    En fait si tu pouvais expliquer clairement ce que tu veux afficher dans ton ComboBox ça m'aiderait...

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Je comprend que tu ne comprennes pas puisque de mon coté, je ne comprends pas non plus.

    Cest pourquoi au début de mon post je demandais s'il n'existait pas un exemple de comment binder un combobox.

    Dans le XAML doit on définir un ou plusieurs riaControlsomainDataSource ?

    Ce que je constate avec les datagrids, c'est qu'en définissant un seul riaControlsomainDataSource avec un QueryName="GetCategoriesQuery, j'arrive à afficher des datagrids basés sur des catégories mais aussi basés sur des achats, ou encore des vêtements. Pour afficher les autres, il me suffit de faire dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     Protected Overrides Sub OnNavigatedTo(ByVal e As System.Windows.Navigation.NavigationEventArgs)
            source.DomainContext.Load(CType(source.DomainContext, LaundryContext).GetCategoriesQuery())
            source.DomainContext.Load(CType(source.DomainContext, LaundryContext).GetVetementsQuery())
            source.DomainContext.Load(CType(source.DomainContext, LaundryContext).GetClientsQuery())
            source.DomainContext.Load(CType(source.DomainContext, LaundryContext).GetAchatsQuery())
        End Sub
    alors que si j'ai plusieurs comboBox, je n'arrive pas à définir l'itemsSource de chacun ni les éléments que je veux voir.

  12. #12
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Bon faudrait vraiment que je me mette à RIA Services ^^

    Et si dans ton ItemsSource tu mets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ItemsSource="{Binding DomainContext.Achats, ElementName=source}"
    Dans ton dernier post plus haut : c'est utile de faire plusieurs Load les uns après les autres ? Ils ne vont pas "s'écraser" les uns les autres ?

  13. #13
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Magique

    Qu'est-ce que ce serait si tu te mettais aux RIA services

    Je vois effectivement Achat : 1

    C'est quoi de l'intuition ? de la chance ? ou du génie ?

    N'empêche que j'aimerais tellement comprendre "comment faire" plutôt que de simplement "faire".

    Enfin, pour répondre à ta question:
    c'est utile de faire plusieurs Load les uns après les autres ? Ils ne vont pas "s'écraser" les uns les autres ?
    Non, ils ne s'écrasent pas, mais si j'ai plusieurs tables dans ma db, je peux décider desquelles je mets dans mon contexte. Je peux aussi par exemple ne prendre que les achats > qu'une certaine date via un
    source.DomainContext.Load(CType(source.DomainContext, LaundryContext).GetAchatsPlusGrandQueDateQuery())
    A ce moment, effectivement, celà va écraser "TousMesAchats" par "MesAchatsPlusGrandsQuuneCertaineDAte"

    Ma conclusion, mets toi au RIA services pour que tu puisses nous expliquer

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

Discussions similaires

  1. Data Binding Combobox et liste de fichier! [VB.Net]
    Par Jayme65 dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 25/03/2013, 11h29
  2. Méthodes de data binding
    Par Arnaud_03 dans le forum Services Web
    Réponses: 4
    Dernier message: 16/07/2008, 16h50
  3. Data Binding et DependencyProperty
    Par gege02 dans le forum C#
    Réponses: 1
    Dernier message: 22/06/2007, 10h36
  4. [VB.NET]data binding et bindingcontext dur a trouver
    Par thierry007 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 02/12/2006, 15h45
  5. [XML] XML Data Binding vers php
    Par noa dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 01/03/2006, 16h31

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