4
私はイベントで初心者です。 This exampleは、ArrayListが変更されるたびにイベントが呼び出されることを示します。私はジェネリックを使ってそれを行う方法を知りたいです。 IListまたはListを実装するには?私はそれをコードしようとしたが、私は立ち往生している。持っている方法リストの変更時にイベントのリスト
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();
}
}
}
あなたはそのコレクションを投稿できますか?他の人には便利だと思うだろうと確信しています(ただし、私はおそらく私自身を実装しています)。 –
このようなクラスの非常に優れた実装は次のとおりです。http://stackoverflow.com/a/5256827/830254 –
ObservableCollection.Clear()はNotifyCollectionChangedEventArgsでCollectionChangedイベントを発生させます。Action == Resetと空のOldItemsとNewItemsによって、コレクションから削除されたアイテム – Lu55