2009-09-01 3 views
1

Lorsqu'un élément est ajouté à BindingList, l'événement ListChange me le signale afin que je puisse réagir en conséquence.Recherche d'un événement BindingList.AboutToRemove

Cependant, lorsqu'un élément est supprimé de la liste, l'événement ListChange arrive trop tard, comme l'article n'est plus dans la liste. Comment pouvez-vous attraper le retrait avant il a été supprimé?

J'ai besoin d'identifier l'objet pour pouvoir supprimer un gestionnaire d'événements qui y est attaché.

Répondre

4

L'implémentation actuelle de BindingList<T> ne semble pas prendre cela en charge. Votre meilleure option pourrait être de créer votre propre implémentation de BindingList qui a un événement Retrait:

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); 
     } 
    } 
} 
+0

Merci pour cela - j'ai été en mesure d'appliquer votre code C# à mon application VB et cela fonctionne bien. – Bill

2

Le VB implentation de C# code de Rex.

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