将LongListSelector绑定到异步更新的嵌套ObserverCollection(使用WebClient)

时间:2012-02-08 15:06:37

标签: c# silverlight observablecollection silverlight-toolkit longlistselector

我在Windows Phone Silverlight项目中有一个LongListSelector,它绑定到嵌套的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 :(得分:0)

您是否尝试添加每个项目作为一个组。您应该获取整个数据并将它们分组并分配给longlistselector。对增量加载数据进行摸索将无法正常工作,因为可能需要将新项目添加到现有组中。

这是一个很好的样本,可以在平面列表中使用,该列表随时可用并分组并分配给longlistselector

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

Windows Phone Series – Jump Lists