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 :

Comment capturer les évènements des BO contenus dans une List?


Sujet :

C#

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 11
    Points : 13
    Points
    13
    Par défaut Comment capturer les évènements des BO contenus dans une List?
    Bonjour,

    Ma problématique est la suivante :
    Je cherche à capturer des évènements produits par les BO (MyObject) contenus dans une liste de BO (List<MyObject>).
    En faite, je me demande s'il est possible via une ligne de code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ObjectsList<>.Changed += new ChangedEventHandler(ListChanged);
    de capturer génériquement l'ensemble des évènements "Changed" produit par les éléments constituant la liste "ObjectsList".

    Ci-dessous, je vous propose un bout de code exemple sur laquelle j'ai essayé d’implémenter la capture générique.

    Merci par avance de votre aide.

    Salutation,

    Sylum

    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
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    using System;
    using System.Collections.Generic;
    using System.Text;
     
    namespace CollectionApplication
    {
     
        // A delegate type for hooking up change notifications.
        public delegate void ChangedEventHandler(object sender, EventArgs e);
     
        class MyObject
        {
            // An event that clients can use to be notified whenever the elements is changed.
            public event ChangedEventHandler Changed;
     
            // Invoke the Changed event.
            protected virtual void OnChanged(EventArgs e)
            {
                if (Changed != null)
                    Changed(this, e);
            }
     
            public MyObject(int myInt, string myString)
            {
                _myInt = myInt;
                _myString = myString;
                OnChanged(EventArgs.Empty);
            }
     
            private int _myInt;
            public int MyInt
            {
                get { return _myInt; }
                set { _myInt = value; OnChanged(EventArgs.Empty); }
            }
     
            private string _myString;
            public string MyString
            {
                get { return _myString; }
                set { _myString = value; OnChanged(EventArgs.Empty); ; }
            }
        }
     
        class MyCollection
        {
            public List<MyObject> ObjectsList = new List<MyObject>();
     
            public MyCollection()
            {
                // Capture générique ne fonctionne pas
                // ObjectsList<>.Changed += new ChangedEventHandler(ListChanged);
     
                ObjectsList.Add(new MyObject(1, "One"));
                ObjectsList.Add(new MyObject(2, "Two"));
                ObjectsList.Add(new MyObject(3, "Three"));
     
            }
     
            // This will be called whenever the list changes.
            private void ListChanged(object sender, EventArgs e)
            {
                Console.WriteLine("This is called when the event fires.");
            }
     
        }
     
    }

  2. #2
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 693
    Points : 1 187
    Points
    1 187
    Par défaut
    Bonjour,

    Tel que tu as fait ce n'est pas possible ! Car les événements sont déclenchés par les objets de ta liste et non par ta liste.

    Il y a cependant un moyen, en faisant une collection custom héritant par exemple de IList ou de ICollection<T> ou ICollection pour tes objets et alors à la définition des méthodes Add AddRange, Remove, ... tu auras la possibilité d'abonner/désabonner ta collection sur les événements de tes objets.

  3. #3
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 174
    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 174
    Points : 25 115
    Points
    25 115
    Par défaut
    c'est un peu le principe mis en place avec wpf

    déjà les system.collections.objectmodel.observablecollection on un évènement quand tu ajoutes ou supprimes un élément

    sinon il faut implémenter system.componentmodel.inotifypropertychanged
    cette interface te fournit un event qui passe en paramètre le nom de la propriété modifiée
    donc sur toutes les propriétés de ta classe il faut déclenché cet évènement, il faut que ta classe collection perso y soit abonné pour lever ensuite un évènement aussi

    m'enfin si le but c'est de rafraichir l'interface suite à un changement, passe sur wpf tout de suite !
    tout y est déjà codé pour ...

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur / architecte
    Inscrit en
    Juillet 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur / architecte

    Informations forums :
    Inscription : Juillet 2009
    Messages : 473
    Points : 674
    Points
    674
    Par défaut
    Je suppose qu'on peut le faire avec la Rx lib qui est encore dans les dev labs de microsoft...
    Quelqu'un s'y connait ça m'intéresserait de savoir....

Discussions similaires

  1. [SP-2007] Comment lister les groupes d'un AD dans une liste sous SP ?
    Par thegritch dans le forum SharePoint
    Réponses: 1
    Dernier message: 17/10/2011, 16h09
  2. Réponses: 4
    Dernier message: 12/12/2010, 11h08
  3. Réponses: 3
    Dernier message: 19/01/2010, 09h53
  4. Réponses: 2
    Dernier message: 01/04/2009, 13h54
  5. Réponses: 26
    Dernier message: 30/07/2007, 12h09

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