我目前有一个itemsCollection和一个historyCollection。两者都是单独的隔离.dat文件。
保存和显示适用于这两个隔离存储,但问题是当我尝试从itemCollection中删除某些内容时,我还要删除historyItemCollection中包含该特定itemIndex的所有项目。
更新
itemCollection可能包含以下内容:
historyItemCollection可能如下所示:
因此,如果我删除b(itemIndex 1),那么我希望在historyItemCollection中删除它们。
我可以删除itemCollection中的项目,但是historyItemCollection会抛出错误。
int i = 0;
for (i = 0; i <= App.ViewModel.historyItemCollection.Count-1; i++)
{
if (App.ViewModel.historyItemCollection[i].VehicleId == (Application.Current as App).vehicleIndex)
{
App.ViewModel.historyItemCollection[i].Remove(i);
}
}
App.ViewModel.vehicleItemsCollection[(Application.Current as App).vehicleIndex].Remove((Application.Current as App).vehicleIndex);
我收到的错误消息: 参数名称:index
这条线失败了:
App.ViewModel.historyItemCollection[i].Remove(i);
答案 0 :(得分:1)
在这一行中你真的是指这两个都是itemIndex
吗?
App.ViewModel.historyItemCollection[(Application.Current as App).itemIndex].Remove((Application.Current as App).itemIndex);
此外,调用RefreshItems()
会对itemIndex
产生影响吗?
我建议将代码分成更多行 - 然后单步执行。
顺便说一句,为什么要在此方法中设置DataContext?那你为什么还要设置两次 - 每次都设置不同类型的对象。这看起来很不寻常 - 也许您可以将DataContext全局设置为一个新的ViewModel类,该类具有作为子项的历史和项目?
答案 1 :(得分:1)
问题在于,当您向前迭代时,您正在从列表中删除项目 当您从列表中删除项目时,您将使列表中的总项目数和相对位置无效。
如果您必须以这种方式编辑列表,则应该向后退一步,以免影响索引。
另见How to remove elements from a generic list while iterating over it?