正在寻找BindingList.AboutToRemove事件

时间:2009-09-01 01:35:08

标签: .net

当一个项目被添加到BindingList时,ListChange事件让我知道所以我可以做出相应的反应。

但是,当某个项目从列表中 已删除 时,ListChange事件就来得太晚了,因为该项目不再是 in 列表。如何删除 之前删除它?

我需要识别对象,以便删除已附加到它的事件处理程序。

2 个答案:

答案 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