по следующему this answer Я кодировал почти такой же путь. Ниже приведена часть моего кода.Коллекция была изменена при попытке удалить выбранные элементы данных datagrid
XAML связывания:
<cst:CustomDataGrid x:Name="grdItems" ItemsSource="{Binding myItems, IsAsync=True}" SelectedItemsList="{Binding SelectedItems, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
ViewModel:
Protected Overrides Sub DeleteCurrent()
Dim msg As New UserMessage()
If SelectedItems IsNot Nothing Then
For Each SelectedItem In SelectedItems
myItems.Remove(SelectedItem)
Next
RaisePropertyChanged("Items")
End If
End Sub
Private m_myItems As ObservableCollection(Of item)
Public Property myItems() As ObservableCollection(Of item)
Get
Return m_myItems
End Get
Set(value As ObservableCollection(Of item))
m_myItems = value
End Set
End Property
Private m_SelectedItem As IList = New List(Of item)()
Public Property SelectedItems() As IList
Get
Return m_SelectedItem
End Get
Set(value As IList)
m_SelectedItem = value
' RaisePropertyChanged("SelectedItems")
End Set
End Property
Выбор отлично работает. Но когда я зацикливаюсь, чтобы удалить выбранный элемент, я получаю исключение, что «Collection был изменен. Операция перечисления может не выполняться». Например, я выбираю 3 строки и нажимаю кнопку удаления кнопки, когда я наблюдаю свой объект SelectedItems, количество равно 3, как и ожидалось, но сразу после выполнения строки с myItems.Remove (SelectedItem) счет уменьшается до 1. Почему это происходит, я не мог понять, потому что я не изменяю SelectedItems, но myItems.
PS; customdatagrid - это точно такой же код, как и исходное сообщение выше. вот почему я не добавил его здесь.
ToArray не доступен для коллекций. Ilist, но я понял, как использовать toarray. Таким образом, кастинг был сначала необходим. Для каждого выбранного элемента в выбранных тегах. (Из пункта) .ToArray() myItems.Remove (SelectedItem) Далее – batmaci