我的应用页面中有一个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没有。
答案 0 :(得分:1)
问题来自模板的工作原理。默认情况下,gridview是Visible,而listview则不是。当我们导航到该页面时,VisualStateManager
被称为 AFTER 页面呈现,因此当导航到该网格时,网格视图会在短时间内显示并调用LoadMoreItemsAsync
隐藏之前的方法。故事板完成后,列表视图会显示并调用LoadMoreItemsAsync
并出现问题。
我是如何解决的:将两个视图默认折叠并在VisualStateManager
中显示时进行处理(导航到页面后始终调用)。