gpt4 book ai didi

wpf - 尝试删除数据网格的选定项目时修改了集合

转载 作者:行者123 更新时间:2023-12-03 10:21:31 25 4
gpt4 key购买 nike

关注 this answer我编码的方式几乎相同。以下是我的代码的一部分。

XAML 绑定(bind):

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

View 模型:
   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 行并按下删除键盘按钮,当我观察到我的 SelectedItems 对象时,计数为 3,但在使用 myItems.Remove(SelectedItem) 执行该行之后,计数下降到 1。为什么会发生这种情况,我无法弄清楚,因为我不是在修改 SelectedItems,而是在修改 myItems。

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

最佳答案

" i couldnt figure out because I am not modifing SelectedItems but myItems"



您正在从 myItems 中删除项目用作 ItemsSource的数据网格。从 ItemsSource 中删除项目自动随后将其从 SelectedItems 中删除,并且这种行为非常有意义(当某个项目不再位于数据网格中时,您无法保持它处于选中状态)。

这就是错误的原因。枚举时不能让集合发生变化。

实现此目的的一种可能方法是将选定的项目复制到临时集合,例如临时数组。然后枚举数组而不是原始集合:
Dim copyOfSelectedItems(SelectedItems.Count-1) As Object
SelectedItems.CopyTo(copyOfSelectedItems,0)
For Each SelectedItem In copyOfSelectedItems
myItems.Remove(SelectedItem)
Next

关于wpf - 尝试删除数据网格的选定项目时修改了集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29675086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com