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

C# Discussion :

MVVM Light et délégué


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur technique
    Inscrit en
    Mai 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur technique

    Informations forums :
    Inscription : Mai 2015
    Messages : 23
    Points : 15
    Points
    15
    Par défaut MVVM Light et délégué
    Bonjour à tous.
    Je viens vers vous afin d’avoir quelques explications sur un petit problème. J’ai repris une ancienne application que j’avais créée pour la refaire en utilisant le pattern MVVM light. La nouvelle version fonctionne très bien à un détail près.
    Dans une classe j’ai le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Public class copie 
    {
    public delegate void del(Fichier f);
    public event del even;
    . . . 
    . . . 
    fr = new Fichier(f1.FullName, date, newfileDestination,"");
    even?.Invoke(fr);
    }
    Ensuite dans le ViewModel je m’abonne à l’événement ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    copie.even += new Copie.del(Methode);
    Cela fonctionne très bien, lorsque l’even est appelé la méthode est bien exécutée, sauf que j’ai le double message suivant lors de la compilation.

    1 – CA1009 - Déclarez le premier paramètre de 'Copie.del' en tant qu'objet nommé 'sender'.
    2 – CA 1009 - Déclarez le second paramètre de 'Copie.del' en tant que EventArgs, ou une instance d'un type qui étend EventArgs, nommée 'e'.
    Message que je n’avais pas dans la précédente version qui n’utilisait le pattern MVVM light.
    Le code d’erreur CA1009 renvoie vers le site de Microsoft mais j’avoue ne pas comprendre ce que cela signifie.

    Merci à ceux qui voudront bien m'accorder un moment.
    Salutations.

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    ton évènement ne respecte pas la norme (qui n'est pas obligatoire)
    un évènement c'est normalement object sender, eventargs e pas fichier f
    sender étant le déclencheur de l'évènement (this en général) et eventargs permettant de passer des paramètres à l'abonné

    tu peux le constater sur plein d'évènements
    l'utilité de cette norme est surtout de pouvoir s'abonner à plusieurs évènements sur la même cible (pas toujours utile)
    ca permet aussi d'avoir du code identique et compréhensible de ceux qui connaissent la norme

    si tu veux respecter la norme tu dois créer une classe du genre NewFileEventArgs qui hérite de EventArgs et qui a une propriété de type Fichier
    l'event serait alors déclaré de la manière suivante public event EventHandler<NewFileEventArgs> evenet le déclenchement even?.Invoke(this, new NewFileEventArgs(fr));
    (bienque le mot clé delegate puisse encore être utilisé il est rarement utilisé de nos jours car il y a des remplacants tel action func ou eventhandler<T>)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur technique
    Inscrit en
    Mai 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur technique

    Informations forums :
    Inscription : Mai 2015
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    Bonjour Pol63
    Merci pour la réponse.
    La méthode que j'emploi pour abonner un délégué à un événement est présente dans de nombreux ouvrages mais il semble en effet que les choses évoluent et j'ai donc suivi ton conseil.
    J'ai modifié mon code ainsi :
    Création d'une classe car j'ai besoin de passer un paramètre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class EventDoublons : EventArgs
        {
            public Fichier f;
     
            public EventDoublons(Fichier f)
            {
                this.f = f;
            }
        }
    ensuite mon événement et son appel avec le paramètre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     public event EventHandler even;
    ...
     even(this, new EventDoublons(fr));
    l'abonnement vers la méthode à éxecuter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       copie.even += d.EcritureFichierDoublons;
    et le cast dans la méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       public void EcritureFichierDoublons(object sender, EventArgs e)
            {
                Fichier f = ((EventDoublons)e).f;
    Alors effectivement je n'ai plus de message à la compilation et cela fonctionne aussi.

    Merci pour tes conseils. Je place la discussion en résolue.

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    Citation Envoyé par af1962 Voir le message
    La méthode que j'emploi pour abonner un délégué à un événement est présente dans de nombreux ouvrages
    tu peux les bruler cette norme date de 2003 ^^ (soit le début de .net)

    la seule qui a changé c'est que les visual studio récents analysent le code et donnent quelques astuces pour l'améliorer

    après ce n'est qu'un conseil, si tu es tout seul à coder dans ton projet tu peux bien faire ce que tu veux vu que ton code fonctionnait

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 23/08/2011, 14h26
  2. mvvm light toolkit pour application WPF
    Par helper_moi dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 21/06/2011, 14h45
  3. [SL4]MVVM Light toolkit + Messenger
    Par chris81 dans le forum Silverlight
    Réponses: 2
    Dernier message: 20/07/2010, 09h04
  4. DataForm Template MVVM light
    Par pmorestin dans le forum Silverlight
    Réponses: 3
    Dernier message: 21/04/2010, 15h03

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