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 multibinding n'affiche pas correctement le selectedItem


Sujet :

Windows Presentation Foundation

  1. #1
    Membre régulier
    Femme Profil pro
    Etudiante en Développement
    Inscrit en
    Avril 2012
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante en Développement
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 106
    Points : 119
    Points
    119
    Par défaut ComboBox multibinding n'affiche pas correctement le selectedItem
    Bien le bonjour

    Voici mon souci : j'ai une combobox qui doit afficher une liste d'utilisateurs, j'ai donc ajouté un ItemTemplate pour afficher les items sous la forme "Nom, Prénom" comme ceci :

    Code xaml : 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
            <ComboBox ItemsSource="{Binding Users}"
                              SelectedItem="{Binding SelectedUser, Mode=TwoWay}"
                              Width="300" 
                              IsEditable="True" 
                              IsReadOnly="True" 
                              Margin="0,5,0,0"
                              HorizontalAlignment="Left">
                        <ComboBox.ItemTemplate>
                            <DataTemplate>
                                <TextBlock>
                                    <TextBlock.Text>
                                      <MultiBinding StringFormat="{}{0}, {1}">
                                        <Binding Path="lastName"/>
                                        <Binding Path="firstName"/>
                                      </MultiBinding>
                                    </TextBlock.Text>
                                </TextBlock>
                            </DataTemplate>
                        </ComboBox.ItemTemplate>
                    </ComboBox>
     
    <TextBox Text="{Binding SelectedUser.firstName}"
                             HorizontalAlignment="Left"
                             Margin="0,5,0,0"
                             Width="300"
                             Height="25" />
     
                    <TextBox Text="{Binding SelectedUser.lastName}"
                             HorizontalAlignment="Left"
                             Margin="0,5,0,0"
                             Width="300"
                             Height="25" />

    Note :
    Users est une ObservableCollection<User> et SelectedUser de type User
    Le rendu est parfait :



    Mais quand on sélectionne un item, là c'est le drame :



    On voit bien pourtant que mon SelectedUser a bien été mis à jour puisque les TextBox au-dessous prennent les bonne valeurs.

    Je ne vois pas ce que je pourrais ajouter ?
    Comment puis-je setter le DisplayMemberPath puisque mon affichage se fait sur plusieurs properties ?

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2009
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 208
    Points : 395
    Points
    395
    Par défaut
    Bonjour,

    Pour corriger cela tu peux surcharger la méthode ToString de ta classe User :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public override string ToString()
    {
        return string.Format("{0}, {1}", this.firstName, this.lastName);
    }
    Et du coup, tu n'as plus besoin de cette partie dans ta vue :
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <ComboBox.ItemTemplate>
    	<DataTemplate>
    		<TextBlock>
    			<TextBlock.Text>
    			  <MultiBinding StringFormat="{}{0}, {1}">
    				<Binding Path="lastName"/>
    				<Binding Path="firstName"/>
    			  </MultiBinding>
    			</TextBlock.Text>
    		</TextBlock>
    	</DataTemplate>
    </ComboBox.ItemTemplate>

    Le rendu, comme la sélection, devrais être bon juste avec la surchage du ToString.

  3. #3
    Membre régulier
    Femme Profil pro
    Etudiante en Développement
    Inscrit en
    Avril 2012
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante en Développement
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 106
    Points : 119
    Points
    119
    Par défaut
    J'y avais pensé également, mais je reçois ma liste de User à partir d'un Web Service et je crois que je perd la surcharge pendant la sérialisation.

    Finalement, j'ai rajouté la surchage de la méthode ToString() côté client, en reprenant le même nom de classe (sans oublier le "partial", sinon c'est le drame ) et le même namespace que dans le fichier Reference.cs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    namespace Fmcti.Sen.LoanManagement.Wpf.LoanManagementWebServiceReference
    {
        public partial class LoanUser
        {
            public override string ToString()
            {
                return lastName + ", " + firstName;
            }
        }
    }
    Ce qui est d'ailleurs plus logique, la méthode ToString() étant liée à la présentation des données, elle n'a rien à faire côté serveur

    Merci de ton aide

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2009
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 208
    Points : 395
    Points
    395
    Par défaut
    Content que ça ai pu t'aider.

  5. #5
    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 : 37
    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
    Points : 3 958
    Points
    3 958
    Par défaut
    Overrider ToString est un peu intrusif, et posera problème si tu dois l'utiliser avec un format différent ailleurs dans l'application.

    Si tu peux te contenter d'une ComboBox non éditable alors ceci devrait suffire :
    Si c'est impossible alors tu peux aussi hériter de ta classe LoanUser et override ToString à ce niveau.

    Sinon définir une propriété "FullName" au lieu d'overrider ToString dans la classe LoanUser directement.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

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

Discussions similaires

  1. La 1ère ligne dans mon tableau ne s'affiche pas correctement
    Par bilou95 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 19/03/2007, 16h33
  2. les é et è ne s'affiche pas correctement
    Par pierrot10 dans le forum Flash
    Réponses: 4
    Dernier message: 05/03/2007, 09h32
  3. Réponses: 1
    Dernier message: 21/11/2006, 16h53
  4. Mes Objets JLabel ne s'affiche pas correctement
    Par michel18 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 03/11/2006, 20h38
  5. variable ne s'affiche pas correctement
    Par Didier100 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 24/02/2006, 14h01

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