Версия 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).
Редактировать: Чтобы прокомментировать комментарийЭрно.На этой (плохо сформулированной) странице документации Silverlight на MSDN Microsoft говорит, что можно "в общем" предположить, что NewItems имеет только один элемент, и даже предлагает ярлык использования NewItems [0] для доступа к нему.Таким образом, они сохраняют сигнатуру IList для «совместимости», но затем продолжают понимать значение типа.Неудовлетворительно.