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

本文关键字:更新 异步 使用 WebClient 绑定 LongListSelector 嵌套 ObserverCollection | 更新日期: 2023-09-27 18:23:59

我在Windows Phone Silverlight项目中有一个LongListSelector,它绑定到一个嵌套的ObservableCollection

为了使分组能够自动工作和更新,我使用了一个扩展ObservableCollection的自定义组类。

我的班级结构如下:

Main.xaml.cs:

ObservableCollection<Group<MyViewModel>> _groups;

分组.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上,但结果相同。

如有任何帮助,我们将不胜感激。

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

您是否试图将每个项目作为一个组来添加。您应该获取整个数据并将其分组,然后分配给长列表选择器。对增量加载的数据进行查找不会很好,因为可能需要将新项目添加到现有组中。

这里有一个很好的例子,可以在一个平面列表中使用,该列表很容易获得并分组并分配给长列表选择器

如何在LongListSelector for Windows Phone 8 的分组列表中显示数据

Windows Phone系列-跳转列表