Как я могу вызвать событие CollectionChanged в ObservableCollection и передать ему измененные элементы?
у меня есть класс, который наследует от ObservableCollection
и добавляет несколько дополнительных методов, таких как AddRange
и RemoveRange
мой базовый вызов метода таков:
public void AddRange(IEnumerable<T> collection)
{
foreach (var i in collection) Items.Add(i);
OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
}
моя проблема в том, что я хочу получить доступ e.NewItems
или e.OldItems
на CollectionChanged
событие для выполнения действия над любым элементом в коллекции и NotifyCollectionChangedAction.Reset
действие не проходит в этих значениях
void Instances_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if (e.NewItems != null) // e.NewItems is always null
{
foreach (var item in e.NewItems)
{
if (item is EventInstanceModel)
((EventInstanceModel)item).ParentEvent = this;
}
}
}
поэтому я подумал, что могу просто использовать NotifyCollectionChangedAction.Add
вместо Reset
, однако, что бросает!--12--> исключение
public void AddRange(IEnumerable<T> collection)
{
var addedItems = collection.ToList();
foreach (var i in addedItems) Items.Add(i);
OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, addedItems));
}
Итак, мой вопрос: как я могу поднять событие CollectionChanged и передать ему новый или старый список элементов?
2 ответов
Я изучал это и, по-видимому,CollectionChanged
метод не может быть поднят с нескольких элементов.
так что я могу позвонить
OnCollectionChanged(new NotifyCollectionChangedEventArgs(
NotifyCollectionChangedAction.Add, singleItem));
но я не могу назвать
OnCollectionChanged(new NotifyCollectionChangedEventArgs(
NotifyCollectionChangedAction.Add, listOfItems));
пока что я просто поднял событие Add для каждого добавленного элемента, но я все еще довольно недоволен этим, так как это означает, что я поднимаю CollectionChanged
событие для каждого элемента AddRange
метод вместо только один раз.
public void AddRange(IEnumerable<T> collection)
{
foreach (var i in collection)
{
Items.Add(i);
OnCollectionChanged(new NotifyCollectionChangedEventArgs(
NotifyCollectionChangedAction.Add, i));
}
}
Это отлично работает для меня "автономный". То есть я не использую ObservableCollection
для привязки данных. Так что это не ObservableCollection
проблема, но скорее ListCollectionView
ограничения.
пожалуйста, прочитайте следующую статью, это очень интересно читать: