从DataGrid中删除ObservableCollection

时间:2015-08-06 15:33:19

标签: wpf vb.net datagrid

我正在制作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中所选项目的索引就不会出现。 t匹配ObservableCollection中的那些项目索引。是否有更好/更简单的方法使用用户在DataGrid中选择的项目从ObservableCollection中删除项目?

2 个答案:

答案 0 :(得分:0)

您可以直接删除项目

,而不是查找索引
Private Sub confirmDelete()
    Dim userAnswer As MessageBoxResult
    userAnswer = MessageBox.Show("Are you sure?", "Delete Selected Items?", MessageBoxButton.YesNo)
    If userAnswer = MessageBoxResult.Yes Then
        For each item in grdReadings.SelectedItems
            testDataList.Remove(item)
        Next
    End If
End Sub

答案 1 :(得分:0)

这就是我的所作所为:

        Dim itemsToRemove As New List(Of CCReading)
        For Each item In grdReadings.SelectedItems
            itemsToRemove.Add(item)
        Next
        For Each item In itemsToRemove
            testDataList.Remove(item)
        Next
        itemsToRemove.Clear()