当一个项目被添加到BindingList时,ListChange事件让我知道所以我可以做出相应的反应。
但是,当某个项目从列表中 已删除 时,ListChange事件就来得太晚了,因为该项目不再是 in 列表。如何删除 之前删除它?
我需要识别对象,以便删除已附加到它的事件处理程序。
答案 0 :(得分:4)
BindingList<T>
的当前实施似乎不支持这一点。您最好的选择可能是创建自己的BindingList实现,它具有一个Remove事件:
public class MyBindingList<T> : BindingList<T>
{
public event ListChangedEventHandler Removing;
protected void OnRemoving(ListChangedEventArgs e)
{
if(Removing != null)
{
Removing(this, e);
}
}
protected override void RemoveItem(int index)
{
if(index > -1 && index < this.Count)
{
OnRemoving(new ListChangedEventArgs(ListChangedType.ItemDeleted, index));
base.RemoveItem(index);
}
}
}
答案 1 :(得分:2)
Rex的C#代码的VB实现。
Imports System.ComponentModel
Public Class MyBindingList
Inherits BindingList(Of T)
Public Event Removing As ListChangedEventHandler
Protected Overrides Sub RemoveItem(ByVal index As Integer)
If index > -1 AndAlso index < Me.Count Then
RaiseEvent Removing(Me, New ListChangedEventArgs(ListChangedType.ItemDeleted, index))
End If
MyBase.RemoveItem(index)
End Sub
End Class