3

У меня есть LongListSelector в проекте Windows Silver Silverlight, который связан с вложенным ObservableCollection.Переплет LongListSelector для вложенного ObserverCollection, который обновляется асинхронно (с использованием WebClient)

Для того, чтобы автоматически группировать и обновлять группу, я использую настраиваемый групповой класс, который расширяет 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, но такой же результат.

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

ответ

0

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

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

How to display data in a grouped list in LongListSelector for Windows Phone 8

Windows Phone Series – Jump Lists