1

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 シグネチャを保持しますが、その後、型の意味を解体します。残念です。

4

1 に答える 1

1

私は何の問題にも遭遇していませんが、答えは「やらないでください!」です。(自分が書いたコードに引数を渡すだけでない限り)。

その理由は (コメントで述べられているように)、アイテムが 1 つしかないことを前提とするコードが Silverlight にある可能性があるためです。今日がなくても、明日はあるかもしれません。この仮定に大きく依存する新しいバージョンの Silverlight が登場したときに、アプリが壊れてしまうことは絶対に避けたいと思います。

于 2011-12-20T14:24:11.883 に答える