从多个隔离存储中删除 - Windows Phone 7

时间:2011-03-27 12:07:46

标签: windows-phone-7

我目前有一个itemsCollection和一个historyCollection。两者都是单独的隔离.dat文件。

保存和显示适用于这两个隔离存储,但问题是当我尝试从itemCollection中删除某些内容时,我还要删除historyItemCollection中包含该特定itemIndex的所有项目。

更新

itemCollection可能包含以下内容:

  • 一个
  • B'/ LI>
  • C

historyItemCollection可能如下所示:

  • a
  • b
  • C
  • B'/ LI>

因此,如果我删除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);

2 个答案:

答案 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?