NotifyCollectionChangedEventArgs の Silverlight バージョンは、複数の (追加、変更、削除された) 項目を受け入れないという点で、完全なフレームワーク バージョンとは異なります。リストを受け取るコンストラクターが実際には欠落しているため、Microsoft はこの使用法をブロックすることを意図していたようです。実際、アイテムのコレクションを渡すと、それらは内部コレクションの最初のアイテムとしてネストされます。
でも!NewItems メンバーと OldItems メンバーは IList 型であるため、不変ではなく、成長させることができます。このアイデアをテストするために、次のヘルパーを作成しました。
private NotifyCollectionChangedEventArgs CreateEventArgsWithMultiple(NotifyCollectionChangedAction action, IEnumerable items, int newStartingIndex)
{
NotifyCollectionChangedEventArgs eventArgs = null;
foreach (var item in items)
{
if (eventArgs == null)
{
eventArgs = new NotifyCollectionChangedEventArgs(action, item, newStartingIndex);
}
else
{
eventArgs.NewItems.Add(item);
}
}
return eventArgs;
}
まだ問題は発生していませんが、Silverlight のこの特定のコーナーに関する経験と意見を求めています。このように追加をバッチ処理する必要がありますか、それとも単にリセットを使用する必要がありますか?
ちなみに、これは Windows Phone 7.1 (Mango) です。
編集:Ernoによるコメントをフォローアップする。Microsoft は、 MSDN のこの (不適切な表現の) Silverlight ドキュメント ページで、「一般的に」NewItems には 1 つの要素しかないと想定できると述べており、NewItems[0] を使用してそれにアクセスするショートカットを提案しています。そのため、「互換性」のために IList シグネチャを保持しますが、その後、型の意味を解体します。残念です。