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 签名以获得“兼容性”,但随后继续屠宰该类型的含义。令人失望。