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 :

Classe RelayCommand et parametres de commande


Sujet :

Windows Presentation Foundation

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Par défaut Classe RelayCommand et parametres de commande
    Bonjour à tous,

    Je me pose une question bien embetante :
    Comment utilise-t-on les parametres de commande ? notamment avec la classe RelayCommand fournie par le gourou Josh ?
    En gros, j'aimerai executer une commande mais en passant un parametre. Mais j'ai beau chercher je ne trouve malheureusement pas d'exemple.

    Any idea please ?
    Merci d'avance
    @ +

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 214
    Par défaut
    Salut,

    Je ne sais pas où tu as récupérer la classe de Josh, mais normallement, il a également écrit une version générique de RelayCommande. En gros, la version normale prend un delegate Action en paramètre du constructeur, la version générique (avec support des paramètres) prend un Action<T>.

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
        public class RelayCommand<T> : ICommand
        {
            #region private fields
            private readonly Action<T> execute;
            private readonly Predicate<T> canExecute;
            #endregion
     
            public event EventHandler CanExecuteChanged
            {
                add
                {
                    if (this.canExecute != null)
                        CommandManager.RequerySuggested += value;
                }
                remove
                {
                    if (this.canExecute != null)
                        CommandManager.RequerySuggested -= value;
                }
            }
     
            /// <summary>
            /// Initializes a new instance of the RelayCommand class
            /// </summary>
            /// <param name="execute">The execution logic.</param>
            public RelayCommand(Action<T> execute)
                : this(execute, null)
            {
            }
     
            /// <summary>
            /// Initializes a new instance of the RelayCommand class
            /// </summary>
            /// <param name="execute">The execution logic.</param>
            /// <param name="canExecute">The execution status logic.</param>
            public RelayCommand(Action<T> execute, Predicate<T> canExecute)
            {
                if (execute == null)
                    throw new ArgumentNullException("execute");
     
                this.execute = execute;
                this.canExecute = canExecute;
            }
     
            public void Execute(object parameter)
            {
                this.execute((T)parameter);
            }
     
            public bool CanExecute(object parameter)
            {
                return this.canExecute == null ? true : this.canExecute((T)parameter);
            }
        }

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Par défaut
    Oui tout à fait, j'ai constaté ça mais je ne sais pas trop comment je dois m'en servir dans la partie ViewModel... Au niveau de la property faut-il fait un truc dans ce gout là ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private _ConnecterCommand As RelayCommand(Of MonType)
        Public ReadOnly Property ConnecterCommand() As ICommand
            Get
                If _ConnecterCommand Is Nothing Then
                    _ConnecterCommand = New RelayCommand(AddressOf Connecter, AddressOf CanConnect)
                End If
                Return _ConnecterCommand
            End Get
        End Property
    Et au niveau de l'execute :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Connecter(MonParametreDeCommande as MonType)
     
        End Sub
    Suis-je dans le vrai ?
    Je ne peux tester pour le moment, mais ce soir j'essaierai je pense
    Merci

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 214
    Par défaut
    J'ai du mal à lire le VB mais ça doit être ça !

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Par défaut
    Merci, je reviendrais ce soir préciser si c'est bien comme cela qu'on les utilise et je cloturerai en fonction

    @+

  6. #6
    Membre émérite
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Par défaut
    Salut,

    oui c'est comme ça qu'on utilise Relaycommand en VB.NET. Dans la version de Josh, le type du paramètre est Object.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Par défaut
    Merci beaucoup

  8. #8
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2
    Par défaut
    Bonjour,

    Je relance un peu le sujet, mais j'aimerais savoir si il est possible à l'aide des relaycommand de passer plusieurs paramètres.
    En clair j'ai un ensemble de textbox dont je souhaite conserver les valeurs en base de donnée après le clique sur un boutton save.

    Comment passer au modelView l'ensemble des valeurs des textbox.

    Merci d'avance

    PS : j'utilise MVVM light.

  9. #9
    Membre chevronné Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Par défaut
    Salut,

    tu peux créer une classe encapsulant l'ensemble des champs représentés par les textes des textbox. Du coup ça te fait un seul paramètre à passer à la commande.

  10. #10
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    Normallement si tu te débrouille bien tu n'a besoin que d'une seule commande sans paramètres...

    Je m'explique tes TextBox, rien ne t'interdit de Binder leur contenu à une propriété de ton ViewModel (databinding) en TwoWay pour qu'il y ai propagation des changements d'états du contenu dans les deux sens, aussi bien Source->UI que UI->Source.

    Sinon tu peux toujours réimplanter les relaycommand pour prendre plusieurs paramètres, et là tu va devoir également reprogrammer toute l'approche de la gestion des commandes des composants et te farcir le développement de ce qu'on a tendance à appeler des Behaviors.
    Je te suggère de regarder le code utiliser autour de Attached Command Binding.
    ou AttachedCommandBehavior... c'est très instructif, avec un peu d'abstraction et d'imagination.

    Moi j'ai reprogrammé comme ca toute une stratégie d'exécution autour de certaines de mes commandes grace au principe des AttachedCommandBehavior, après pas mal de modifications, et d'ajout, suppression, abstraction, j'ai tout un système qui me permet de faire ce que je veux et ce quelque soit le composant, pas uniquement ceux qui ont la propriété Command.
    Sachant cela les possibilités sont innombrables et dans l'absolu tout est possible.

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

Discussions similaires

  1. RelayCommand et parametres de commande
    Par lerieure dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 27/06/2011, 17h08
  2. Echec d'exécution d'une classe par une invite de commande
    Par khaigo dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 13/01/2011, 15h32
  3. classe ado requête parametrée
    Par jadey dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 09/05/2007, 00h32
  4. Réponses: 11
    Dernier message: 05/04/2006, 12h50
  5. [Debutant] Une classe abstraite en parametre ?
    Par kiroukou dans le forum Débuter
    Réponses: 8
    Dernier message: 03/02/2005, 16h05

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