当删除项目时,IBindingList的ListChanged事件将激发类型ListChangedType.ItemDeleted,这可能是由于用户删除了绑定(bind)到列表的datagrid控件中的一行。问题在于,进入该列表的NewIndex在这种情况下是无效的,已被删除,并且已删除的项目不可用。应该有一个ItemDeleting事件,但我怀疑他们是否会解决此问题。
最佳答案
是的,这很烦人,但是有一个简单的解决方法。我创建了一个用于所有列表的BindingListBase<T>
类,而不是使用常规的BindingList<T>
。因为我的类继承自BindingList<T>
,所以我可以访问它的所有 protected 成员,包括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
关于.net - dotnet : ListChangedType. ItemDeleted没用吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/295091/