Кажется, вы должны просто использовать ObservableCollection, то, что вы пытаетесь, не дает никаких преимуществ. Также ObservableCollection уже содержит IList, поэтому нет необходимости делать это.
Чтобы сделать то, что вы ожидаете, будет
public class Test<T> : ObservableCollection<T>
{
public new T this[int i]
{
get
{
Debug.WriteLine("yo");
return base[i];
}
set { base[i] = value; }
}
}
Но просто используйте ObservableCollection