在C#中如何监控 `List<T>` 的更改并触发自定义操作?
时间: 2024-09-16 14:00:59 浏览: 42
C# ListView中添加多种自定义控件源码
4星 · 用户满意度95%
在 C# 中,如果你想监控 `List<T>` 的更改并触发自定义操作,一种常见的做法是使用 `INotifyCollectionChanged` 接口。这个接口被实现了 `ObservableCollection<T>` 类,它是一个观察者模式的实现,当你添加、删除或改变集合元素时,会发出通知。
以下是基本步骤:
1. 创建一个实现了 `INotifyCollectionChanged` 的自定义列表,如:
```csharp
public class CustomObservableList<T> : ObservableCollection<T>, INotifyCollectionChanged
```
2. 当你向列表添加、移除或修改元素时,确保调用相应的通知方法,如 `OnPropertyChanged`, `CollectionChanged` 等:
```csharp
public void Add(T item) {
base.Add(item);
OnPropertyChanged("Items"); // 或其他你想监听的属性名
}
protected virtual void OnPropertyChanged(string propertyName) {
var handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e) {
base.OnCollectionChanged(e);
// 自定义操作这里
YourCustomLogic(e.Action); // 根据 CollectionChangeAction 分别处理增删改操作
}
```
3. 使用 `CustomObservableList` 替换普通的 `List<T>`,然后订阅它的 `PropertyChanged` 事件来响应变化:
```csharp
CustomObservableList<int> list = new CustomObservableList<int>();
list.PropertyChanged += (_, args) => {
switch (args.PropertyName) {
case "Items":
// 执行你的自定义操作
break;
}
};
```
通过这种方式,每当 `List<T>` 发生更改时,你都能得到通知并执行定制的操作。
阅读全文