1

NotifyCollectionChangedEventArgs 的 Silverlight 版本不同于完整的框架版本,因为它不接受多个(添加、更改、删​​除)项目。实际上缺少获取列表的构造函数,因此微软似乎打算阻止这种用法。实际上,如果您传入一个项目集合,它们只是作为内部集合的第一项嵌套。

然而!由于 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 的评论。微软在 MSDN 上的此(措辞不佳)Silverlight 文档页面中表示,可以“通常”假设 NewItems 只有一个元素,甚至建议使用 NewItems[0] 访问它的快捷方式。所以他们保留了 IList 签名以获得“兼容性”,但随后继续屠宰该类型的含义。令人失望。

4

1 回答 1

1

我没有遇到任何问题,但答案是“不要这样做!” (除非您只是将参数传递给您编写的代码)。

原因(正如评论中所说)是 Silverlight 中可能存在假设只有一项的代码。即使没有今天,也可能有明天,而且您绝对不希望您的应用程序在某个更依赖此假设的新版本 Silverlight 出现时崩溃。

于 2011-12-20T14:24:11.883 回答