Je suis un débutant dans les événements. This example montre qu'un événement est appelé chaque fois que ArrayList est modifié. Je voudrais savoir comment le faire en utilisant des génériques. Pour vous implémenter IList ou étendre List? J'ai essayé de le coder mais je suis coincé.Comment avoir des listes avec des événements lors d'un changement dans la liste
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();
}
}
}
Pourriez-vous poster cette collection? Je suis sûr que d'autres le trouveraient utile (bien que je vais probablement mettre en application le mien en attendant). –
Voici une très belle implémentation d'une telle classe: http://stackoverflow.com/a/5256827/830254 –
ObservableCollection.Clear() déclenche un événement CollectionChanged avec NotifyCollectionChangedEventArgs Action == Réinitialiser et vide OldItems et NewItems rend impossible le suivi les éléments qui ont été supprimés de la collection – Lu55