实现一个带通知的List
1. 定义类
我们需要定义一个新的类来扩展List
using System;
using System.Collections.Generic;
namespace CustomList
{
public class ObservableList<T> : List<T>
{
public event EventHandler<ObservableListChangedEventArgs<T>> ListChanged;
protected virtual void OnListChanged(ObservableListChangedEventArgs<T> e)
{
ListChanged?.Invoke(this, e);
}
public new void Add(T item)
{
base.Add(item);
OnListChanged(new ObservableListChangedEventArgs<T>(ObservableListChangedAction.Add, item));
}
public new void Remove(T item)
{
base.Remove(item);
OnListChanged(new ObservableListChangedEventArgs<T>(ObservableListChangedAction.Remove, item));
}
}
public enum ObservableListChangedAction
{
Add,
Remove
}
public class ObservableListChangedEventArgs<T> : EventArgs
{
public ObservableListChangedEventArgs(ObservableListChangedAction action, T item)
{
Action = action;
Item = item;
}
public ObservableListChangedAction Action { get; }
public T Item { get; }
}
}
上面代码中,我们定义了一个ObservableList
在这个类中,我们还重写了List
2. 使用示例
使用ObservableList
下面是两个使用示例:
示例1:订阅事件
using System;
namespace CustomList
{
class Program
{
static void Main(string[] args)
{
ObservableList<string> list = new ObservableList<string>();
list.ListChanged += List_ListChanged; // 订阅事件
list.Add("Hello");
list.Remove("Hello");
}
private static void List_ListChanged(object sender, ObservableListChangedEventArgs<string> e)
{
Console.WriteLine("Action: " + e.Action + ", Item: " + e.Item);
}
}
}
在这个示例中,我们实例化了一个ObservableList
示例2:取消订阅事件
using System;
namespace CustomList
{
class Program
{
static void Main(string[] args)
{
ObservableList<string> list = new ObservableList<string>();
EventHandler<ObservableListChangedEventArgs<string>> handler = List_ListChanged; // 定义事件处理程序
list.ListChanged += handler; // 订阅事件
list.Add("Hello");
list.Remove("Hello");
list.ListChanged -= handler; // 取消订阅事件
}
private static void List_ListChanged(object sender, ObservableListChangedEventArgs<string> e)
{
Console.WriteLine("Action: " + e.Action + ", Item: " + e.Item);
}
}
}
在这个示例中,我们先定义了一个事件处理程序List_ListChanged。然后我们实例化了一个ObservableList
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# 如何实现一个带通知的List