4

我在 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 没有触发)

感谢您提供的任何建议!

4

3 回答 3

1

这绝对看起来像一个错误。要解决此问题,请在重置集合后添加以下行(在任何情况下):

gv.LoadMoreItemsAsync();

您可能可以从控件继承并创建一些将自动执行此操作的覆盖:

于 2012-10-16T13:31:12.357 回答
1

我知道这是一个较老的问题,但我也遇到过它,并认为其他人可能会从 MVVM 方法中受益来解决它。我的解决方法是,在重置集合后,将单个项目加载到集合中。

private async Task ResetCollectionAsync()
{
    Clear();
    await LoadMoreItemsAsync(1);
}

集合被清空并重新添加单个项目。/控件检测事件并重新查询以确定是否加载附加数据GridViewListViewCollectionChangedHasMoreItems

此行为已融入IncrementalLoadingCollection (v1.0.1),它还支持开箱即用的过滤和排序功能。

于 2015-12-08T19:17:09.200 回答
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;
}
于 2021-07-21T20:40:46.787 回答