1

我的应用程序页面(这是一个项目页面模板)中有一个列表视图(用于捕捉状态)和一个网格视图(用于正常状态),它们都绑定到实现ISupportIncrementalLoading接口的集合。以下是实现的方法:

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

我遇到的问题是:当应用程序处于快照模式并且我使用列表视图和网格视图导航到页面时,两个视图都尝试调用LoadMoreItemsAsync并输入异常子句,而在正常(全屏)模式下,只有网格视图调用该方法,而列表视图没有。

4

1 回答 1

1

问题来自模板的工作方式。默认情况下,gridview 是可见的,而 listview 不是。当我们导航到页面时,在页面呈现之后VisualStateManager调用,因此当导航到时,gridview 会在短时间内可见,并在隐藏之前调用该方法。情节提要完成后,会显示列表视图并调用并出现问题。LoadMoreItemsAsyncLoadMoreItemsAsync

我如何解决它:默认情况下使两个视图都折叠并在它们显示在中时进行处理VisualStateManager(导航到页面后总是调用它)。

于 2013-09-28T11:25:20.713 回答