【发布时间】:2017-08-23 10:42:40
【问题描述】:
问题
我想要达到的,你基本上可以看到这里
所以当用户滚动到最后我想加载更多,因为我的列表非常大,我想最大化性能。
我试图通过以下方式实现这一点,将主集合与数据分开,以便我可以在用户到达末尾时将 ItemSource 设置为新的。
到目前为止我实现了什么
public class ViewModel : BaseViewModel {
public ViewModel() {
Initialize();
}
public List<List<Usermodel>> SplitedUserLists { get; set; }
//Main List that im Binding to
public List<Usermodel> ItemSourceCollection { get; set; }
public int ChunkSize { get; set; }
#endregion
private async void Initialize() {
ItemSourceCollection = await LoadList();
// Splites the list (in this case the chunk Size is 5)
SplitedScoreLists = ItemSourceCollection.Split(GetChunkSize()));
ItemSourceCollection = SplitedScoreLists[0];
}
//Gets called from CodeBehind
public void ListViewItemAppearing(ItemVisibilityEventArgs e) {
//Bottom Hit!
if (e.Item == ItemSourceCollection[ItemSourceCollection.Count - 1]) {
if (ChunkSize >= SplitedScoreLists.Count) {
return;
}
foreach (var usermodel in SplitedScoreLists[ChunkSize].ToList()) {
ItemSourceCollection.Add(usermodel);
}
if (ChunkSize < SplitedScoreLists.Count) {
ChunkSize++;
}
}
}
}
问题
我的实现的问题是由于重复,列表实际上比原始列表的计数长。
这是实现此类目标的正确方法吗?
我真的用这个来提高性能吗?我需要使列表包含 1000 多个条目。
【问题讨论】:
-
我会质疑这是否会提高性能,除非加载每个数据块的成本相当高。相反,我会一次加载所有内容并使用搜索框和跳转列表来允许用户浏览列表。
-
我将它们全部加载一次,只是试图不一次全部显示它们。也许用户并不需要它们。
-
作为一个用户,我会觉得这真的很烦人
-
我刚刚在设备上检查了它,您作为用户甚至都不会注意到它。我遵循了所有 Xamarin 指南以提高性能,尽管在尝试完全不存在延迟方面要好一些。所有著名的应用程序都具有这种机制,例如 Reddit。 :)
-
Reddit 从远程源加载它的数据,这是不同的。你说你的是一次加载的。如果我是用户,而您向我展示了 1000 个项目的列表并强迫我滚动到底部而不是搜索或使用跳转列表,我不会留下深刻的印象。
标签: c# xamarin.forms