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(芒果)上。
编辑:跟进Erno的评论。微软在MSDN上的this (poorly worded) Silverlight documentation page中说它可以“普遍”假设NewItems只有一个元素,甚至建议使用NewItems [0]来访问它。因此,他们保留了IList签名的“兼容性”,但随后继续屠夫类型的含义。令人失望的。
答案 0 :(得分:1)
我没有遇到任何问题,但答案是“不要这样做!” (除非您只是将args传递给您编写的代码)。
原因(正如评论中所述)是Silverlight中可能存在代码,假设只有一个项目。即使今天没有,也可能有明天,当一些新版本的Silverlight出现时,你绝对不希望你的应用程序破坏,这更多地依赖于这个假设。