Удаление из нескольких изолированных хранилищ - Windows Phone 7 - PullRequest
0 голосов
/ 27 марта 2011

В настоящее время у меня есть itemsCollection и historyCollection. Оба являются отдельными изолированными файлами .dat.

Сохранение и отображение отлично работает для обоих этих изолированных хранилищ, однако проблема заключается в том, что когда я пытаюсь удалить что-то из itemCollection, я также хочу удалить все элементы из historyItemCollection, где historyItemCollection содержит этот конкретный itemIndex.

Обновление:

ItemCollection может содержать что-то вроде этого:

  • а
  • б
  • с

Коллекция HistoryItemCollection может выглядеть следующим образом:

  • a
  • b
  • с
  • б

Так что, если я удаляю 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);

Я получаю сообщение об ошибке: Имя параметра: индекс

Ошибка в этой строке:

App.ViewModel.historyItemCollection[i].Remove(i);

Ответы [ 2 ]

1 голос
/ 28 марта 2011

Проблема заключается в том, что вы удаляете элементы из списка при итерации по нему.
Когда вы удаляете элементы из списка, вы лишаете законной силы общее количество элементов в списке и вашу относительную позицию.

Если вы должны отредактировать список таким образом, вы должны шагнуть по нему назад, чтобы не влиять на индексацию.

См. Также Как удалить элементы из общего списка при его повторении по нему?1007 *

1 голос
/ 28 марта 2011

В этой строке вы действительно подразумеваете, что оба они равны itemIndex?

App.ViewModel.historyItemCollection[(Application.Current as App).itemIndex].Remove((Application.Current as App).itemIndex);

Кроме того, оказывает ли вызов RefreshItems() какое-либо влияние на itemIndex?

IРекомендую разбить ваш код на несколько строк, а затем пошагово.


Кстати, почему вы устанавливаете DataContext в этом методе?Тогда почему вы также устанавливаете его дважды - и каждый раз для разных типов объектов.Это кажется необычным - возможно, вы могли бы вместо этого установить глобально DataContext для нового класса ViewModel, который имеет историю и элементы в качестве дочерних элементов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...