CollectionChanged
イベントに登録するときに、NotifyCollectionChangedEventArgs
の NotifyCollectionChangedAction
列挙をチェックする必要があるかどうかは疑問です。このようにそれをしない時に、私がつまずいたすべての例:CollectionChangedイベントでNotifyCollectionChangedActionをチェックする必要がありますか?
myCollection.CollectionChanged += (sender, eventArgs) =>
{
if (eventArgs.Action == NotifyCollectionChangedAction.Add)
{
foreach (SampleClass sampleObject in eventArgs.NewItems)
{
addAction(sampleObject);
}
}
else if (eventArgs.Action == NotifyCollectionChangedAction.Remove)
{
foreach (SampleClass sampleObject in eventArgs.OldItems)
{
removeAction(sampleObject);
}
}
// ...
};
はそれがNotifyCollectionChangedAction
を無視して、ちょうどこのようなコードを簡素化することが可能です:
myCollection.CollectionChanged += (sender, eventArgs) =>
{
eventArgs.NewItems?.OfType<SampleClass>()
.ToList()
.ForEach(addAction);
eventArgs.OldItems?.OfType<SampleClass>()
.ToList()
.ForEach(removeAction);
};
このアイデアの欠点は何ですか?私が逃したものはありますか?
私の使用例では、新旧のアイテムを処理するだけで済みます。移動は問題ではありません。例: 'replace'アクション、私は新しいitemを私の単純化されたコードで処理しています。 – WoIIe
@Wolle移動は問題ではありませんが、コードでは最初にaddActionを実行し、次に移動した要素に対してremoveActionを実行します。この場合、あなたが意図していることは疑いの余地があります。 – Evk