If you create your own implementation of IList you can call methods when an item is added to the list (or do anything else you want). Create a class that inherits from IList and have as a private member a list of type T. Implement each of the Interface methods using your private member and modify the Add(T item) call to whatever you need it to do
Code:
public class MyList<T> : IList<T>
{
private List<T> _myList = new List<T>();
public IEnumerator<T> GetEnumerator() { return _myList.GetEnumerator(); }
public void Clear() { _myList.Clear(); }
public bool Contains(T item) { return _myList.Contains(item); }
public void Add(T item)
{
_myList.Add(item);
// Call your methods here
}
// ...implement the rest of the IList<T> interface using _myList
}