清除ISupportIncrementalLoading

时间:2012-10-15 19:07:41

标签: windows-8 microsoft-metro

我在Windows 8 Style App中创建了一个搜索页面。我已经实现了ISupportIncrementalLoading,当用户滚动时,分页效果很好。

我遇到的问题是当用户进行第二次搜索时。我显然不知道如何让LoadMoreItemsAsync再次触发。我尝试了以下内容:

1)清除Observable的底层集合并支持ISupportIncrementalLoading。这将清除屏幕上的所有项目,因此我知道它已正确绑定。

2)完全替换实现ISupportIncrementalLoading的底层集合实例并引发INotifyPropertyChanged,以便视图知道属性已更改。这也清除了屏幕上的所有项目。

但是,在清除或替换基础集合实例后,LoadMoreItemsAsync不想触发。我的预感是UI不认为它需要再加载,但是因为我已经清除了所有项目,所以它应该加载更多。

我已验证HasMoreItems属性设置为true。

如果它有帮助,遗憾的是,如果从Windows 8商店下载FlixPicks,您可以看到生产中的错误。重现的步骤是:

  1. 使用Windows搜索合同进行搜索
  2. 通知分页工作从“搜索”页面
  3. 再次搜索。
  4. 请注意所有项目都已清除。 (此时LoadMoreItemsAsync未触发)
  5. 感谢您提供任何建议!

3 个答案:

答案 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;
}