本文介绍了尝试删除选定的datagrid项时修改了集合的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

通过遵循此答案,我以几乎相同的方式进行了编码.下面是我的代码的一部分.

by following this answer I coded almost same way. Below is part of my code.

XAML绑定:

<cst:CustomDataGrid x:Name="grdItems"   ItemsSource="{Binding myItems, IsAsync=True}"   SelectedItemsList="{Binding SelectedItems, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"                            

ViewModel:

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

选择效果很好.但是,当我循环删除所选的每个项目时,出现了修改了集合.可能无法执行枚举操作"的异常.例如,我选择3行并按Delete键,当我观察到我的SelectedItems对象时,count为预期的3,但是在执行myItems.Remove(SelectedItem)行之后,count下降为1.为什么会这样,我无法弄清楚,因为我不是在修改SelectedItems,而是myItems.

Selection works perfectly fine. But when I am looping to remove selected each item, I am getting exception that "Collection was modified. Enumeration operation may not execute.". For example, I select 3 rows and press delete keyboard button, when I observe my SelectedItems object, count is 3 as expected but right after executing the line with myItems.Remove(SelectedItem), count goes down to 1. why is that happening, i couldnt figure out because I am not modifing SelectedItems but myItems.

PS;customdatagrid与上面的原始帖子完全相同的代码.那就是为什么我没有在这里添加它.

PS; customdatagrid is exactly same code as the original post above. thats why i didnt add it here.

推荐答案

在执行foreach循环时,只需将选定的项目复制到新集合中即可,例如使用ToArray linq扩展方法:

just copy selecteditems to new collection when doing foreach loop, e.g using ToArray linq extension method:

For Each SelectedItem In SelectedItems.ToArray()
    myItems.Remove(SelectedItem)
 Next

这篇关于尝试删除选定的datagrid项时修改了集合的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-30 07:08