views:

95

answers:

2

I am trying to trigger a process when a RemoveAt(i) method is performed on an ArrayList I have defined. Can this be done? How?

Thanks,

Asaf.

+2  A: 

What about using ObservableCollection instead an ArrayList? It shipped with WPF but I believe you can use it without problems if you're using .net 3.5. ObservableCollection implements INotifyCollectionChanged, so you can have access to the CollectionChanged event.

Edit: You can also create your own collection, implementing ICollection and IEnumerable, adding an ArrayList as a field and raising events around your own Add and Remove methods. Check out the solution provided by this guy.

Here's a snippet on how you can achieve what you want:

public class MyArrayList : IList, ICollection, IEnumerable, ICloneable
{
    private ArrayList arrayList = new ArrayList();

    public event System.EventHandler RemovedItem;

    public void RemoveAt(int index)
    {
     this.arrayList.RemoveAt(item);
     if (RemovedItem != null) {
      RemovedItem(this, new EventArgs());
     }
    }

    // implement required interface members...
}
Hilton Perantunes
A: 

You would need to subclass array list and override the method in order for this to work. In .Net 3.5 there is an "ObservableCollection" class which implements a CollectionChanged event which you could use if you aren't constrained to using ArrayList. ObservableCollection also implements ICollection and IEnumerable so you should be able to swap it out for ArrayList.

Ben Childs
I tried subclassing and overriding, but then I got an error due to RemoveAt being a 'group method'...
Asaf