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 :

Commande avec arguments dans une architecture MVVM


Sujet :

Silverlight

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 199
    Points : 83
    Points
    83
    Par défaut Commande avec arguments dans une architecture MVVM
    bonjour

    j'aimerai savoir en silverlight 3, avec mvvm, comment effectuer une commande avec plusieurs paramètres?

    dans ma couche viewModel, j'ai ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #region SaveCommand
            private void CommandeAjouterPersonnel()
            {
                AjouterPersonnel = new RelayCommand(ExecuteSaveCommand);
            }
     
            public ICommand AjouterPersonnel { get; internal set; }
     
            public void ExecuteSaveCommand(int num, string nom, string prenom, string mail, string fonction)
            {
                srvPersonnelClient.ajouterPersonnelAsync(num, nom, prenom, mail, fonction);
            }
            #endregion
    mon problème est que mon new RelayCommand(ExecuteSaveCommand) ne fonctionne pas, jai
    La méthode surchargée correspondant le mieux à Galasoft.MvvmLight.Command.RelayCommand(System.Action) possède des arguments non valides
    je ne sais pas quoi mettre à mon ExecuteSaveCommand ?

    également dans ma vue, code xaml, comment appeler ce ICommand avec paramètre sur clic d'un bouton ?

  2. #2
    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
    Tu peux utiliser un objet agrégeant tous les paramètres de la commande : une propriété par paramètre; puis binder les propriétés de cet objet à la view.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    ICommand.Execute ne prend qu'un seul paramètre, donc la seule solution est de créer une classe qui regroupe les paramètres :

    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
    20
    21
    22
    23
    24
    25
    26
    class SaveCommandArgs
    {
        public int Num { get; set; }
        public string Nom { get; set; }
        public string Prenom { get; set; }
        public string Mail { get; set; }
        public string Fonction { get; set; }
    }
     
    ...
     
            #region SaveCommand
     
            private void CommandeAjouterPersonnel()
            {
                AjouterPersonnel = new RelayCommand<SaveCommandArgs>(ExecuteSaveCommand);
            }
     
            public ICommand AjouterPersonnel { get; internal set; }
     
            public void ExecuteSaveCommand(SaveCommandArgs args)
            {
                srvPersonnelClient.ajouterPersonnelAsync(args.Num, args.Nom, args.Prenom, args.Mail, args.Fonction);
            }
     
            #endregion

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 199
    Points : 83
    Points
    83
    Par défaut
    ok mais côté xaml comment on utilise cette méthode tout en évitant de trop écrire dans le code behind ?

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Y a pas vraiment de moyen simple... c'est entre autres pour ça que la plupart du temps les commandes n'ont pas de paramètres, ou alors un seul. Il vaudrait mieux que tu passes rien à la commande, et que tu récupères les infos dont tu as besoin à partir des propriétés du ViewModel

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 199
    Points : 83
    Points
    83
    Par défaut
    dans ce cas mvvm n'est pas appliqué correctement aussi, car le couplage redevient fort. En plus j'ai structuré programme en couches, pas dans des dossiers mais bien dans des nouveaux projets Silverlight, et donc mon viewModel ne peut pas voir les propriétés de mes view...
    arf en fait je pense qu'avec ce bloquage je vais devoir créer ma classe d'arguments directement du code behind de ma view et faire l'appel à ma méthode une fois la classe instancié et renseigné.

    silverlight c'est bien pour faire de jolies applis, mais quelle galère je trouve quand on veux faire une appli un peu poussée niveau métier

    merci pour ces infos en tout cas

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par johnaliashead Voir le message
    mon viewModel ne peut pas voir les propriétés de mes view...
    Il n'est pas question que le ViewModel accède aux propriétés de la vue, ce serait totalement contraire à l'esprit de MVVM. C'est les contrôles de la vue qui doivent être bindés sur le ViewModel

    Si je saisis bien ton problème, tu as un formulaire avec des champs num, nom, prenom, email et fonction ? dans ce cas tu bindes les TextBox du formulaire aux propriétés du ViewModel, et dans le save tu accèdes directement à ces propriétés; pas besoin de passer quoi que ce soit en paramètre... Ou alors j'ai pas compris ce que tu cherchais à faire

    Citation Envoyé par johnaliashead Voir le message
    silverlight c'est bien pour faire de jolies applis, mais quelle galère je trouve quand on veux faire une appli un peu poussée niveau métier
    Peut-être parce que tu n'appliques pas bien le pattern

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 199
    Points : 83
    Points
    83
    Par défaut
    oui voilà je compte remplir plusieurs champs et valider ma saisie.

    en effet je ne voyais pas ce traitement de la même façon que toi. J'étais plus dans l'idée que le binding servait à afficher des données d'une bdd par exemple... mais là je comprend mieux la logique. dans mon ViewModel je crée un objet Personne avec les champs correspondants (num nom prenom...) que je binde a mes textbox, et à l'appel de ma méthode je récupère l'objet rempli..

    ok merci je ne le voyai pas comme ça

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/11/2010, 20h15
  2. envoi d argument dans une commande d un CheckButton
    Par ours_en_pluche dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 14/10/2009, 10h30
  3. recuperer une fonction avec arguments dans une dll
    Par freuh94 dans le forum Windows
    Réponses: 3
    Dernier message: 03/10/2009, 11h45
  4. Création fonction avec argument dans une classe
    Par Général03 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 30/06/2009, 09h57
  5. Réponses: 1
    Dernier message: 28/11/2007, 11h52

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