Когда вы удаляете книгу из коллекции Books
, ObservableCollection
уведомит привязку данных об изменении, что, в свою очередь, изменит коллекцию SelectedItems
.
Обычно это вызываетисключение, но в данном случае это не так, поскольку он «маскируется» тем, что удаление первого элемента просто перемещает второй элемент на его место (уменьшение размера коллекции), а перечисление вперед просто проверяет, существует ли следующий индекс,и поскольку это не так, цикл не продолжается.Вы можете подтвердить это, выбрав три элемента - первый будет удален, второй пропущен, а третий будет удален снова.
Самое простое решение - убедиться, чтоперебрать коллекцию, отличную от свойства SelectedItems
.Самый дешевый способ добиться этого - использовать расширение LINQ ToArray
в первой строке.
var books = AllBooks_GridView.SelectedItems.ToArray();
Это создаст новый массив, который будет содержать все книги, которые были выбраны, и когда вы затем удалите из ViewModel.Books
и обновляет SelectedItems
, это больше не будет иметь значения, поскольку наша books
переменная является другим экземпляром.