Коллекция была изменена; операция перечисления может не выполняться - PullRequest
2 голосов
/ 23 июля 2011

Я получаю эту ошибку, когда пытаюсь закрыть представления в нашем приложении silverlight с помощью инфраструктуры MVVM

Коллекция была изменена; операция перечисления может не выполняться.

Вот мой код:

ObservableCollection<IViewModel> _viewModels = new ObservableCollection<IViewModel>();

        var _viewManager = AppContext.Current.ViewService.GetViewManager("Main");
        var _views = _viewManager.OpenViews;

        _viewModels = _views;

        foreach (var _vm in _viewModels)
        {
            _viewManager.CloseView(_vm);
        }

Ответы [ 3 ]

6 голосов
/ 23 июля 2011

Вы не можете изменить коллекцию, которая повторяется с использованием foreach.

CloseView(_vm), кажется, удаляет элемент из ObservableCollection.

4 голосов
/ 23 июля 2011

Хотя Мариус Шульц совершенно прав, простое решение состоит в том, чтобы создать новую коллекцию с данными, которые вы хотите удалить, или использовать цикл for (;;) вместо foreach.

// using Linq's ToArray() to create a new collection
foreach (var _vm in _viewModels.ToArray()) 
{
    _viewManager.CloseView(_vm);
}
0 голосов
/ 23 июля 2011

Заворачивается с помощью цикла for -

var viewManager = AppContext.Current.ViewService.GetViewManager("Main");
var views = viewManager.OpenViews;

for (int i = views.Count -1; i < views.Count; i--)
{
    if(i == -1)
    {
        return;
    }
    viewManager.CloseView(_views[i]);
}

прошел мой путь назад через счетчик _view.

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