none
capturer génériquement des évènements produits par des BO contenus dans une liste RRS feed

  • Question

  • Bonjour,

    Ma problématique est la suivante :
    Je cherche à capturer des évènements produits par des BO (MyObject) qui sont contenus une liste de BO (List<MyObject>). 
    En faite, je me demande s'il est possible via une ligne de code du genre : 
    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,

    Cédric

    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()
            {
                // Add "eventChanged" to the Changed event on "List".
                // 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.");
            }

        }

    }
    jeudi 7 octobre 2010 10:16

Réponses

  • Bonjour,

    Il n'existe rien qui permettent d'écouter tous les événements de manière générique d'un objet se trouvant dans une collection. Cependant, si vos objets implémentent l'interface INotifyPropertyChanged (pour signaler un changement de valeur d'une propriété), vous pouvez utiliser une collecion de type ObservableCollection ou BindingList, qui déclenchentà des évenements lorsque les objets contenues dans ces dernières déclenchent l'évenement PropertyChanged.

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS ADO .NET 3.5 - MCPD Windows Developper 3.5 - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    • Marqué comme réponse cconte jeudi 7 octobre 2010 14:14
    jeudi 7 octobre 2010 12:00
    Modérateur