【发布时间】:2015-08-06 15:33:18
【问题描述】:
我正在制作 WPF 应用程序,目前我无法使用 DataGrid 中的选定项目从 ObservableCollection 中删除项目。 DataGrid 使用 ObservableCollection 作为其 ItemsSource。在我开始对列进行排序之前,我做了一些似乎可以工作的东西:
Private Sub confirmDelete()
Dim userAnswer As MessageBoxResult
userAnswer = MessageBox.Show("Are you sure?", "Delete Selected Items?", MessageBoxButton.YesNo)
If userAnswer = MessageBoxResult.Yes Then
Dim index As Integer
For i As Integer = grdReadings.SelectedItems.Count - 1 To 0 Step -1 'step backwards through list
index = grdReadings.Items.IndexOf(grdReadings.SelectedItems(i))
testDataList.RemoveAt(index)
Next
End If
End Sub
因此,如果我从不按 DataGrid 中的任何列进行排序,这可以正常工作,但是一旦我以与添加项不同的顺序对 DataGrid 进行排序,DataGrid 中选定项的索引就会不匹配这些项目在 ObservableCollection 中的索引。有没有更好/更简单的方法来使用用户在 DataGrid 中选择的项目从 ObservableCollection 中删除项目?
【问题讨论】:
-
而不是使用索引
Cast将行对象添加到它的基础类型,然后从集合中删除该对象。 -
我尝试做
For Each item In grdReadings.SelectedItems Dim removeRow As CCReading = CType(item, CCReading) testDataList.Remove(removeRow) Next,这返回了与以下相同的错误:集合已修改;枚举操作可能无法执行。 -
调试一下,
item显示什么? -
item的值为{Cap_Check.CCReading},removeRow的值为{Cap_Check.CCReading}。 -
collectionChanged事件会因此触发吗?