Soy un novato en eventos. Este ejemplo muestra que un evento se invoca cada vez que el ArrayList es cambiado. Me gustaría saber cómo hacer uso de medicamentos genéricos. Para implementar la interfaz IList o ampliar la Lista? He probado el código, pero estoy atascado.

using System;
using System.Collections.Generic;

namespace Events
{
    public delegate void ChangedEventHandler(object sender, EventArgs e);

    public class ListWithChangedEvent<T> : IList<T>
    {
        public event ChangedEventHandler Changed;

        protected virtual void OnChanged(EventArgs e)
        {
            if (Changed != null)
            {
                Changed(this, e);
            }
        }

        public void Add(T value)
        {
            base.Add(value);
            OnChanged(EventArgs.Empty);
        }

        public void Clear()
        {
            base.Clear();
            OnChanged(EventArgs.Empty);
        }

        public T this[int index]
        {
            set
            {
                base[index] = value;
                OnChanged(EventArgs.Empty);
            }
        }
    }

    class EventListener
    {
        private ListWithChangedEvent<string> List;

        public EventListener(ListWithChangedEvent<string> list)
        {
            List = list;
            List.Changed += new ChangedEventHandler(ListChanged);
        }

        private void ListChanged(object sender, EventArgs e)
        {
            Console.WriteLine("This is called when the event fires.");
        }

        public void Detach()
        {
            List.Changed -= new ChangedEventHandler(ListChanged);
            List = null;
        }
    }

    class Program
    {
        public static void Main(string[] args)
        {
            ListWithChangedEvent<string> list = new ListWithChangedEvent<string>();

            EventListener listener = new EventListener(list);

            list.Add("item 1");
            list.Clear();
            listener.Detach();
        }
    }
}

OriginalEl autor yoitsfrancis | 2010-11-23

1 Comentario

  1. 6

    Puede utilizar ObservableCollection y se puede ampliar !!

    Espacio De Nombres: System.Las colecciones.ObjectModel

    Asamblea: WindowsBase (en WindowsBase.dll)

    Esta colección de fuegos de eventos cada vez que la lista está cambiado.(decir que todos los elementos que se agregan, quitan de la lista)

    Pero tenga en cuenta : La ObservableCollection no desencadenar eventos si las propiedades internas de los objetos es la celebración de los cambios. Si usted necesita que me dejan saber, he ampliado la colección Observable a tener esa característica también.

    Podría publicar la colección? Estoy seguro que otros que sería útil (aunque seguramente me estoy volviendo a poner en práctica mi propia en el ínterin).
    Aquí es una muy buena aplicación de este tipo de clase: stackoverflow.com/a/5256827/830254
    ObservableCollection.Clear() plantea CollectionChanged evento con NotifyCollectionChangedEventArgs Acción == Reset y vacío OldItems y NewItems hace que sea imposible para el seguimiento de los elementos que se han eliminado de la colección

    OriginalEl autor GuruC

Dejar respuesta

Please enter your comment!
Please enter your name here