Привязка LongListSelector к вложенной коллекции ObserverCollection, которая обновляется асинхронно (с использованием WebClient) - PullRequest
3 голосов
/ 08 февраля 2012

У меня есть LongListSelector в проекте Windows Phone Silverlight, который привязан к вложенному ObservableCollection.

Для того, чтобы группировка работала и обновлялась автоматически, я использую пользовательскую группукласс, который расширяется ObservableCollection.

Моя структура классов выглядит следующим образом:

Main.xaml.cs:

ObservableCollection<Group<MyViewModel>> _groups;

Group.cs:

Group<T> : ObservableCollection<T> {...}

Я заполняю группы асинхронно, используя WebClient:

WebClient wc = new WebClient();
wc.OpenReadCompleted += (sender, obj) {
    // parse the response here, get list of MyModels
    ...

    foreach (var model in models)
    {
        var group = _groups.SingleOrDefault(g => g.Key == model.Key);
        if (group == null)
        {
            group = new Group<MyModel> { Key = model.Key };
            _groups.Add(group);
        }

        group.Add(model);
    }
}

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

Я пытался обработать событие CollectionChanged, чтобы добавить элементы в группу вместона ReadComplete, но тот же результат.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 27 января 2014

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

Вот хороший пример того же самого для использования в плоском списке, который легко доступен и сгруппирован и назначен на longlistselector

Как отобразить данные в сгруппированном списке в LongListSelector дляWindows Phone 8

Серия Windows Phone - списки переходов

...