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