当项被删除时,IBindingList的ListChanged事件触发类型ListChangedType.ItemDeleted,可能是用户删除绑定到列表的数据网格控件中的行.问题是列表中的NewIndex在此事件中无效,已被删除,并且已删除的项目不可用.应该有一个ItemDeleting事件,但我怀疑他们会解决这个问题.
是的,这很烦人,但有一个简单的解决方法.我创建了一个BindingListBase
我用于所有列表而不是使用普通列表的类BindingList
.因为我的类继承自BindingList
,所以我可以访问所有受保护的成员,包括RemovedItem
方法.
这使我能够在删除项目时接听.你可以做我做的事情并拥有一个我总是添加项目的mRemovedItems列表,或者提出你自己的'ItemRemoved'事件.
请参阅下面的代码示例:
Public MustInherit Class BindingListBase(Of T) Inherits BindingList(Of T) Protected mRemovedItems As New List(Of T) Protected Overrides Sub ClearItems() MyBase.ClearItems() mRemovedItems.Clear() End Sub Protected Overrides Sub RemoveItem(ByVal index As Integer) Dim item As T = MyBase.Item(index) MyBase.RemoveItem(index) mRemovedItems.Add(item) End Sub Public ReadOnly Property RemovedItems as List(Of T) Get Return mRemovedItems End Get End Property End Class