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 :

[WPF] Problème de binding avec une classe perso


Sujet :

Windows Presentation Foundation

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut [WPF] Problème de binding avec une classe perso
    Bonjour

    Après quelques temps (deux ans quand même), je me remets au .NET, WPF, etc., et mes connaissances dans ce domaines sont un peu rouillée (elle ne sont déjà pas énormes...).

    L'application en cours de développement est un programme devant permettre le contrôle d'un appareil photo

    j'ai le code XAML suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <ComboBox
      ItemsSource="{Binding Parameters.ISOSpeedList}"
      SelectedItem="{Binding Path=SelectedISO, UpdateSourceTrigger=PropertyChanged}"
      DisplayMemberPath="DisplayValue"
    />
    Parameters.ISOSpeedList est une liste de d'objet implémentant IParameter, une classe toute simple contenant de champ, un uint et un string (DisplayValue)


    du côté C# :

    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
     
    public class MainViewModel : DependencyObject
    {
       //...
     
       public IParameters Parameters { get; set; }
     
       public IParameter SelectedISO
       {
    	get { return (IParameter)GetValue(SelectedISOProperty); }
    	set { SetValue(SelectedISOProperty, value); }
       }
     
       public static readonly DependencyProperty SelectedISOProperty =
    	DependencyProperty.Register("SelectedISO", typeof(IParameter), typeof(MainViewModel), new UIPropertyMetadata(null));
       //...
    }
    Le problème :

    Lorsque je sélectionne un élément dans ma combobox, la propriété SelectedISO est bien mise à jour. Mais si je modifie directement le paramètre en question directement sur l'appareil (ce qui déclenche un évènement qui met à jour SelectedISO, l'élément sélectionnée dans la ComboBox n'est pas mis à jour.

    Qu'est-ce qui n'est pas correct ?

    Remarque : tout fonctionne parfaitement avec une liste de string à la place d'une liste de IParameter

  2. #2
    Membre éprouvé Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Points : 998
    Points
    998
    Par défaut
    Hello,

    Peut être que la combobox ne trouve pas d'élément égal au IParameter que tu lui fournit.

    Essayes d'overrider Equals et GetHashCode dans tes objets IParameter ?

    Au pire tu peux aussi jouer avec SelectedValue...
    Jonathan ANTOINE - Découvrez mon livre: MVVM, de la découverte à la maîtrise.

    Microsoft MVP Client Application Development
    - MCPD Windows 4.0, etc.
    Mon blog : http://www.jonathanantoine.com

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut
    Citation Envoyé par jmix90 Voir le message
    Peut être que la combobox ne trouve pas d'élément égal au IParameter que tu lui fournit.
    Lorsque le paramètre est modifié par l'appareil l'objet correspondant à la nouvelle valeur est récupéré directement dans la liste "bindé" par la combobox.

    Citation Envoyé par jmix90 Voir le message
    Essayes d'overrider Equals et GetHashCode dans tes objets IParameter ?
    Non, ma classe implémentant IParameter ressemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public class MonParametre : IParameter {
       public uint DeviceValue { set; get; }
       public string DisplayValue { set; get; }
    }
    Citation Envoyé par jmix90 Voir le message
    Au pire tu peux aussi jouer avec SelectedValue...
    C'est à dire ?

  4. #4
    Membre éprouvé Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Points : 998
    Points
    998
    Par défaut
    Citation Envoyé par JuTs Voir le message
    Non, ma classe implémentant IParameter ressemble à ça :
    Tu peux lui faire overridé correctement GetHashCode et Equals pour vérifier que cela ne solutionne pas le problème ?


    Citation Envoyé par JuTs Voir le message
    C'est à dire ?
    Au lieu de binder sur l'objet (selectedItem) tu te bindes sur une valeur, en l'occurrence : DisplayValue
    Jonathan ANTOINE - Découvrez mon livre: MVVM, de la découverte à la maîtrise.

    Microsoft MVP Client Application Development
    - MCPD Windows 4.0, etc.
    Mon blog : http://www.jonathanantoine.com

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut
    ça fonctionne en overridant GetHashCode et Equals, Merci

  6. #6
    Membre éprouvé Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Points : 998
    Points
    998
    Par défaut
    Cool !
    Jonathan ANTOINE - Découvrez mon livre: MVVM, de la découverte à la maîtrise.

    Microsoft MVP Client Application Development
    - MCPD Windows 4.0, etc.
    Mon blog : http://www.jonathanantoine.com

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

Discussions similaires

  1. 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, 11h12
  2. Problème d'héritage avec une classe abstraite
    Par Ph.denis dans le forum C++
    Réponses: 7
    Dernier message: 22/03/2008, 11h37
  3. [WPF] Problème de binding entre une SortedList et une ListBox
    Par JuTs dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 10/12/2007, 14h20
  4. Réponses: 8
    Dernier message: 16/10/2006, 13h28
  5. Utilisation iterator avec une classe perso
    Par SteelBox dans le forum C++
    Réponses: 19
    Dernier message: 07/03/2005, 12h30

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