我在Windows 8 Style App中创建了一个搜索页面。我已经实现了ISupportIncrementalLoading,当用户滚动时,分页效果很好。
我遇到的问题是当用户进行第二次搜索时。我显然不知道如何让LoadMoreItemsAsync再次触发。我尝试了以下内容:
1)清除Observable的底层集合并支持ISupportIncrementalLoading。这将清除屏幕上的所有项目,因此我知道它已正确绑定。
2)完全替换实现ISupportIncrementalLoading的底层集合实例并引发INotifyPropertyChanged,以便视图知道属性已更改。这也清除了屏幕上的所有项目。
但是,在清除或替换基础集合实例后,LoadMoreItemsAsync不想触发。我的预感是UI不认为它需要再加载,但是因为我已经清除了所有项目,所以它应该加载更多。
我已验证HasMoreItems属性设置为true。
如果它有帮助,遗憾的是,如果从Windows 8商店下载FlixPicks,您可以看到生产中的错误。重现的步骤是:
感谢您提供任何建议!
答案 0 :(得分:1)
这绝对看起来像个错误。要解决此问题,请在重置集合后添加以下行(在任何情况下):
gv.LoadMoreItemsAsync();
您可以从控件继承并创建一些自动执行此操作的覆盖:
答案 1 :(得分:0)
我知道这是一个较旧的问题,但我也遇到过它并认为其他人可能会从MVVM方法中获益来解决它。我的修复是,在重置集合后,将一个项目加载到集合中。
private async Task ResetCollectionAsync()
{
Clear();
await LoadMoreItemsAsync(1);
}
清空集合并重新添加单个项目。 GridView
/ ListView
控件会检测CollectionChanged
事件并重新查询HasMoreItems
以确定是否加载其他数据。
此行为融入IncrementalLoadingCollection(v1.0.1),它还支持开箱即用的过滤和排序功能。
答案 2 :(得分:0)
我正在重温一个老问题,但是当以前的答案都不适合我时,我找到了一个解决方案。
myCollection = new MyIncrementalLoadingCollection();
myListView.ItemSource = myCollection; //This is what I was missing!
因为我希望每次导航到页面时都刷新列表视图,所以这是我的最终结果。
protected override async void OnNavigatedTo(NavigationEventArgs e) {
_logItems = new CommandLogIncrementalLoadingCollection();
logListBox.ItemsSource = _logItems;
}