如何在CollectionChanged处理程序中找出Add或Insert是否已完成

时间:2013-08-18 10:44:46

标签: c# wpf events

我有一个ObservableCollection,我通过AddInsert方法添加了商品。

根据调用的方法,我想在我连接到集合的CollectionChanged处理程序中执行一些特定的操作。

代码如下所示:

var items = new ObservableCollection<DataClass>();
items.CollectionChanged += this.ItemsChanged;

...

private void ItemsChanged(object sender, NotifyCollectionChangedEventArgs args)
{
    var action = args.Action;
    var insertIndex = args.NewStartingIndex;
    ...
}

不幸的是,对于actionNotifyCollectionChangedAction.Add方法,Add始终为Insert

insertIndex 0来自Add次来电,0Insert方法调用0作为参数时。

有没有办法找出在集合中调用哪些方法?

2 个答案:

答案 0 :(得分:2)

在集合级别检查它似乎违反直觉,因为添加只是插入的特殊情况。但是,您可以通过编写两个类来解决此问题:

  • 一个扩展ObservableCollection或包装ObservableCollection的类
  • 一个扩展NotifyCollectionChangedEventArgs的类(让我们称之为MyCustomNotifyCollectionChangedEventArgs)。只需定义一个新成员即可跟踪您需要的内容,例如自定义枚举。

现在只需使集合类使用MyCustomNotifyCollectionChangedEventArgs而不是NotifyCollectionChangedEventArgs。在事件处理程序中,检查对象是否为MyCustomNotifyCollectionChangedEventArgs类型。如果是,只需将其强制转换并读取您定义的成员的值。

答案 1 :(得分:1)

我知道这确实很老,但是遇到了同样的问题,发现我认为这是更简单的方法。如果是Add,则为args.NewStartingIndex == items.Count。并非如此。

if ( args.NewStartingIndex == Items.Count )
{
    //this is an add
}
else
{
    //this is an insert
}