1

我有一个,我通过and方法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;
    ...
}

不幸的是,action总是NotifyCollectionChangedAction.AddAddInsert方法。

insertIndex正在0调用Add,而且0当我使用as 参数调用该Insert方法时。0

有什么方法可以找出集合中调用了哪些方法?

4

2 回答 2

2

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

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

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

于 2013-08-18T11:04:43.603 回答
1

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

if ( args.NewStartingIndex == Items.Count )
{
    //this is an add
}
else
{
    //this is an insert
}
于 2018-06-25T20:05:28.017 回答