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 :

Mettre à jour des combobox par attributs


Sujet :

Silverlight

  1. #1
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 51
    Par défaut Mettre à jour des combobox par attributs
    Salut
    Voila j'ai un problème (je ne sais pas si c'est un bug ou quoi)
    En fait, je développe sur silverlight 4, framework 4 et visual studio 2010.

    Voila mon problème, je veux remplir des combobox à partir d'objet dont les valeurs sont récupérés en base de données.
    L'objet en question contient deux attributs (valueFrench et valueEnglish)

    L'IHM silverlight affiche par défaut dans la combobox la valeur de valueFrench.
    Lorsque l'utilisateur change de langue, je fait via c# un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    myComboBox.DisplayMemberPath = "valueEnglish";
    Soit la combobox va afficher les valeurs anglaise de la liste d'objet.
    par défaut le selectedIndex de la combobox est 0 (donc le 1er élément)

    Le problème est que lorsque l'on change de langue, la combobox affiche bien les valeur en anglais mais la valeur affiché par défaut sélectionné elle reste en francais!!

    Le plus étonnant c'est que si l'utilisateur change la sélection avant d'avoir changé la langue puis change la langue, là la valeur affiché dans la combobox se change bien en anglais.

    J'ai éssayer jusr après le displaymemberpath de fait une

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myComboBox.SelectedIndex = 0;
    Rien n'y fait

    Quelqu'un à une idée?
    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
    Au lieu de change le DisplayMemberPath, je rajouterais une propriété Value dans ta classe qui retourne valueEnglish ou valueFrench selon la langue. Quand l'utilisateur passe en anglais/francais tu fais juste un NotifyPropertyChanged("Value"), ça devrait mettre à jour toute ta combo.

  3. #3
    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 : 38
    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
    Au lieu de change le DisplayMemberPath, je rajouterais une propriété Value dans ta classe qui retourne valueEnglish ou valueFrench selon la langue. Quand l'utilisateur passe en anglais/francais tu fais juste un NotifyPropertyChanged("Value"), ça devrait mettre à jour toute ta combo.
    Conceptuellement cette approche ne semble pas viable puisque cela signifierait que l'état d'une entité métier dépendrait du contexte technique : "Value" changerait de sémantique d'un instant à l'autre.
    D'autre part le modèle métier ne devrait jamais être contraint par des problématiques techniques qui sont susceptibles de changer fréquemment.

    En revanche il serait possible d'externaliser cela en utilisant un wrapper ayant par exemple pour seule propriété "Value".

    P.S. : Désolé de ne pas être plus constructif en proposant une solution au problème initial.

  4. #4
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Conceptuellement cette approche ne semble pas viable puisque cela signifierait que l'état d'une entité métier dépendrait du contexte technique
    Je pense que l'approche de Sky est parfaitement viable dans un contexte MVVM, la variable Value se situant du coté ViewModel.

  5. #5
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 51
    Par défaut
    Hm
    D'accord je vais testé l'approche de Skyounet.
    En fait c'est pas grave pour la séparation métier pour ma part car toutes les entités que je traite sont des vue coté client silverlight que je construit par un entityLayer coté serveur (couche métier)

    Je vous tiens au courant de la modif ^^ Merci!

    Par contre aucun d'entre vous n'as testé le binding avec DisplayMemberPath pour me dire si c'est réellement un bug ou pas?

  6. #6
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Par contre aucun d'entre vous n'as testé le binding avec DisplayMemberPath pour me dire si c'est réellement un bug ou pas?
    Je serais tenté de dire oui.

    Soit la combobox va afficher les valeurs anglaise de la liste d'objet.
    par défaut le selectedIndex de la combobox est 0 (donc le 1er élément)
    Si j'ai bien compris, tu parles un moment de changer SelectedIndex à 0. Mais si celui ci etait déjà à 0, il ne sera pas pris en compte (car pas de changement de valeur). Essaye de passer successivement la valeur selectedIndex à -1 puis de nouveau à 0, ça devrait mettre à jour le texte selectionné.

    Sinon la solution de Sky est, de loin, la meilleur.

  7. #7
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 51
    Par défaut
    Salut
    Merci pour vos réponse j'ai réussi à régler le problème en utilisant la solution de sky
    Mais il fallait quand même changer les selectedIndex

    Voici le code pour ceux que ca intéresse
    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
    18
    19
     
    foreach (NDView p in listView)
                    {
                        int val = p.ValueInternational;
                        if (idMetric == 1)
                            val = p.ValueAngloSax;
     
                        p.Value = val;
                    }
                    cbx.DisplayMemberPath = "Value";
                    cbx.SelectedValuePath = "Value";
     
                    if (cbx.Items.Count >= 1)
                    {
                        int oldDefaultVal = defaultIndex;
                        cbx.SelectedIndex = 1;
                        cbx.UpdateLayout();
                        cbx.SelectedIndex = oldDefaultVal;
                    }

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

Discussions similaires

  1. Mettre à jour des tables avec un trigger
    Par Titouf dans le forum Langage SQL
    Réponses: 9
    Dernier message: 20/01/2008, 15h57
  2. mettre à jour des plugins automatiquement
    Par kurkLord dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 17/08/2006, 13h26
  3. Mettre à jour des champs dans un sous formulaire
    Par Patros dans le forum Access
    Réponses: 3
    Dernier message: 09/08/2006, 15h16
  4. Mettre à jour des champs suite à un RecordSet
    Par Miss Ti dans le forum Access
    Réponses: 3
    Dernier message: 25/07/2006, 22h43
  5. Mettre à jour un controle par dblclik avec sous-formulaire
    Par lagratteCchouette dans le forum Access
    Réponses: 10
    Dernier message: 19/04/2006, 19h47

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