将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 for Windows Phone 8 的分组列表中显示数据
Windows Phone系列-跳转列表