Поскольку вам нужно предпринять действия до того, как пользователь изменит коллекцию, я считаю, что ваше CollectionChangedEvent происходит слишком поздно (коллекция уже изменилась).
Вместо этого рассмотрим создать свой собственный класс коллекции, производный от ObservableCollection , а затем переопределить методы Add (), Insert () и Remove (), чтобы выполнить дополнительную обработку перед вызовом реализации базового класса.Вы должны быть в состоянии найти примеры этого в Интернете.
Вот пример кода, с которого можно начать.Происходит из коллекции:
public class MyCollection<T> : Collection<T>, INotifyCollectionChanged, INotifyPropertyChanged
{
public MyCollection(Collection<T> list)
: base(list)
{
}
public MyCollection()
: base()
{
}
#region INotifyCollectionChanged Members
public event NotifyCollectionChangedEventHandler CollectionChanged;
protected void NotifyChanged(NotifyCollectionChangedEventArgs args)
{
NotifyCollectionChangedEventHandler handler = CollectionChanged;
if (handler != null)
{
handler(this, args);
}
}
#endregion
public new void Add(T item)
{
// Do some additional processing here!
base.Add(item);
this.NotifyChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, item, base.Count-1));
this.OnPropertyChanged("Count");
}
}