增量加载和快照视觉状态

时间:2013-09-28 11:14:57

标签: c# xaml listview gridview windows-store-apps

我的应用页面中有一个listview(用于捕捉状态)和gridview(用于正常状态)(这是一个项目页面模板),它们都绑定到一个实现{的集合{1}}界面。以下是实施的方法:

ISupportIncrementalLoading

我遇到的问题是:当应用程序处于捕捉模式并且导航到包含listview和gridview的页面时,两个视图尝试调用public HasMoreItemsDelegate MoreItemsExist { get; set; } public LoadMoreItemsDelegate<T> ItemsLoadAsync { get; set; } public bool HasMoreItems { get { return this.MoreItemsExist(); } } private bool isLoading; public bool IsLoading { get { return this.isLoading; } private set { this.isLoading = value; this.OnPropertyChanged("IsLoading"); } } public Windows.Foundation.IAsyncOperation<LoadMoreItemsResult> LoadMoreItemsAsync(uint count) { if (this.IsLoading) { throw new InvalidOperationException("Only one operation in flight at a time"); } this.IsLoading = true; return AsyncInfo.Run((c) => LoadMoreItemsAsync(c, count)); } async Task<LoadMoreItemsResult> LoadMoreItemsAsync(CancellationToken c, uint count) { try { IEnumerable<T> itemsToAdd = await ItemsLoadAsync(c, count); foreach (var item in itemsToAdd) { this.Add(item); } return new LoadMoreItemsResult { Count = (uint)itemsToAdd.Count() }; } finally { this.IsLoading = false; } } 并输入异常子句,而在正常情况下(全屏)模式,只有gridview调用方法,而listview没有。

1 个答案:

答案 0 :(得分:1)

问题来自模板的工作原理。默认情况下,gridview是Visible,而listview则不是。当我们导航到该页面时,VisualStateManager被称为 AFTER 页面呈现,因此当导航到该网格时,网格视图会在短时间内显示并调用LoadMoreItemsAsync隐藏之前的方法。故事板完成后,列表视图会显示并调用LoadMoreItemsAsync并出现问题。

我是如何解决的:将两个视图默认折叠并在VisualStateManager中显示时进行处理(导航到页面后始终调用)。