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 :

Commandes WPF avec plusieurs paramètres


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 53
    Par défaut Commandes WPF avec plusieurs paramètres
    Bonjour, je suis développeur C#/WPF débutant M-V-VM,
    J'aimerais savoir comment passer plusieurs paramètres à une commande liée à un bouton.
    Exemple : J'ai l'objet Personne avec les trois propriétés { Nom, Prenom, Age },
    avec une interface graphique (UserControl) qui contient 3 champs TextBox et un bouton.
    En cliquant sur ce bouton, je voudrais récupérer les valeurs de mes TextBox, les affecter à mes trois champs de l'objet Personne avant de sauvegarder tout dans une base de données.

    J'ai repris un exemple avec RelayCommand<T>, j'ai fait :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public ICommand AddCommand{
    get{
     
    this.addCommand = new RelayCommand<Personne>
    ((p) => this.AddPerson(p), (p) => this.CanAddPerson());
     
    return addCommand;
    }
     
    }
    Le problème se pose au niveau de l'interface graphique : je n'arrive pas à transformer mes trois champs TextBox en un objet Personne pour le passer à l'attribut CommandParameter dans mon code XAML.


    Si quelqu'un a une idée je lui serai reconnaissant de bien vouloir la poster.
    J'attend impatiemment vos réponses.
    Cordialement.

  2. #2
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 62
    Par défaut
    La technique que j'utilise est la suivante.
    Dans ma VM, j'ai un membre privée "Personne", les Textbox sont bindés sur des propriétés de la VM, qui mettes à jour ce membre "Personne"; et au final, le RelayCommand ajoute cette personne, et reset le membre sur un nouvel objet.
    On peut binder directement sur les membres du membre "Personne", mais j'aime bien ajouter des contrôles supplémentaires (comme de vérifier si elle existe pas déjà par exemple).

    Code C# : 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
    class VM
    {
        private Personne _add = new Personne();
        public string Nom
        {
            get { return _add.Nom; }
            set { _add.Nom = value; }
        }
     
     
        public ICommand AddCommand
        {
            get {
                return new RelayCommand<Personne>( () => { this.AddPerson(_add); _add = new Personne() }, () this.CanAddPerson()
                );
            }
        }
    }

    Il manque les "OnPropertyChanged", mais en gros, voilà "l'idée".

  3. #3
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Ce que recommande Spazou est la bonne solution: on expose les propriétés de l'objet, à travers le VM, à la vue. On ne manipule pas de contrôles graphiques dans la vue

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 53
    Par défaut
    Merci bien pour vos réponse Spazou et Thomas, je vais tester mon programme en suivant votre astuce, je vous tiens au courant ...

    Encore une fois, merci d'avoir répondu aussi tôt.
    à tout à l'heure.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 53
    Par défaut
    La solution fonctionne bien, impeccable,
    Sauf que maintenant j'aimerais activer/désactiver un champ TextBox à partir de certains paramètres du ViewModel.

    Par exemple, si la propriété Gender de Personne est égale "femme" alors la propriété IsEnabled du textbox1 devient false, et le textbox2 devient IsReadOnly.

    Je sais qu'il faut faire un DataBinding quelque part, mais je ne me souviens plus de la syntaxe.

    Merci de me solutionner.

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

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Par défaut
    Citation Envoyé par helper_moi Voir le message
    Par exemple, si la propriété Gender de Personne est égale "femme" alors la propriété IsEnabled du textbox1 devient false, et le textbox2 devient IsReadOnly.

    Hello,

    Tu as plusieurs solutions:
    1. Soit tu fais des booléens dans ton ViewModel qui se mette à jour lorsque la propriété Gender est mise à jour et tu fais un binding sur cette propriété pour IsEnabled et IsReadOnly dans tes textbox
    2. Soit tu créé un converter qui converter un "Gender" en boolean (par exemple : si femme return true else return false). Ensuite tu bindes Gender sur IsEnabled de ta textbox en utilisant ce converter et tu fais la même chose pour IsReadOnly...



    Bon courage,

    Ps: voici un article sur la création d'un converter : http://www.c-sharpcorner.com/UploadFile/dpatra/804/

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

Discussions similaires

  1. REQUETE avec plusieurs paramètres et condition
    Par dahu17 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 04/06/2007, 16h20
  2. Réponses: 3
    Dernier message: 04/06/2007, 12h29
  3. [Système] Fonction avec plusieurs paramètres optionnels
    Par cerede2000 dans le forum Langage
    Réponses: 1
    Dernier message: 25/05/2007, 14h36
  4. [Struts 1.1][html:link] avec plusieurs paramètres
    Par bbo1991 dans le forum Struts 1
    Réponses: 3
    Dernier message: 21/03/2007, 12h32
  5. [Struts] Html:link avec plusieurs paramètres
    Par mariemor64 dans le forum Struts 1
    Réponses: 2
    Dernier message: 24/05/2006, 14h27

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