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.Addの両方に適用されます。AddInsert

insertIndex呼び出し中ですが、0パラメーターとしてメソッドを呼び出すときも同様です。Add0Insert0

コレクションでどのメソッドが呼び出されたかを調べる方法はありますか?

4

2 に答える 2

2

追加は挿入の特殊なケースにすぎないため、コレクション レベルでチェックするのは直観に反するようです。ただし、次の 2 つのクラスを作成することでこれを解決できます。

  • ObservableCollection を拡張するか、ObservableCollection をラップする 1 つのクラス
  • NotifyCollectionChangedEventArgs を拡張する 1 つのクラス (MyCustomNotifyCollectionChangedEventArgs と呼びましょう)。カスタム列挙型など、必要なものを追跡する新しいメンバーを 1 つ定義するだけです。

ここで、コレクション クラスが NotifyCollectionChangedEventArgs の代わりに MyCustomNotifyCollectionChangedEventArgs を使用するようにします。イベント ハンドラで、オブジェクトのタイプが MyCustomNotifyCollectionChangedEventArgs であるかどうかを確認します。そうであれば、それをキャストして、定義したメンバーの値を読み取ります。

于 2013-08-18T11:04:43.603 に答える