У меня есть ObservableCollection и я прилагаю к событию CollectionChanged:WPF CollectionChanged Event OldItems.Count
void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if (e.Action == NotifyCollectionChangedAction.Add)
{
for (int i = 0; i < e.NewItems.Count; i++)
{
int id = -1 * i;
DocumentWatchList d = (DocumentWatchList)e.NewItems[i];
d.UID = id;
_dataDc.DocumentWatchLists.InsertOnSubmit(d);
}
}
else if (e.Action == NotifyCollectionChangedAction.Remove)
{
for (int i = 0; i < e.OldItems.Count; i++)
{
DocumentWatchList d = (DocumentWatchList)e.OldItems[i];
_dataDc.DocumentWatchLists.DeleteOnSubmit(d);
}
}
_dataDc.SubmitChanges();
}
Моя коллекция привязывается к сетке, а код ViewModel (выше) вызывается, как и ожидалось. Когда я выбираю несколько строк и удаляю delete, я ожидаю, что коллекция OldItems будет содержать количество строк, которые я выбрал (n). однако на самом деле происходит то, что событие получает n раз, и каждый раз, когда количество коллекции OldItems равно 1. Итак, при каких условиях коллекция OldItems содержит более 1 элемента? Это поведение происходит из элемента управления datagrid, или, вернее, это способ, которым должен работать ObservableCollection.CollectionChanged?