ISupportIncrementalLoading检索异常

时间:2015-12-11 14:56:47

标签: c# win-universal-app windows-10-universal windows-10-mobile uwp-xaml

我已经实现了@WithUserDetails接口来执行@Test @WithUserDetails("usernameThatIsFoundByUserDetailsService") public void run() throws Exception { MvcResult result = mockMvc.perform(get("/")) .andExpect(status().isOk()) .etc; } 的增量加载。

界面包含以下代码:

ISupportIncrementalLoading

接口的实例就是这个:

ListView

其中public interface IIncrementalSource<T> { Task<IEnumerable<T>> GetPagedItems(int pageIndex, int pageSize); } public class IncrementalLoadingCollection<T, I> : ObservableCollection<I>, ISupportIncrementalLoading where T : IIncrementalSource<I>, new() { private T source; private int itemsPerPage; private bool hasMoreItems; private int currentPage; public IncrementalLoadingCollection(int itemsPerPage = 10) { this.source = new T(); this.itemsPerPage = itemsPerPage; this.hasMoreItems = true; } public void UpdateItemsPerPage(int newItemsPerPage) { this.itemsPerPage = newItemsPerPage; } public bool HasMoreItems { get { return hasMoreItems; } } public IAsyncOperation<LoadMoreItemsResult> LoadMoreItemsAsync(uint count) { return Task.Run<LoadMoreItemsResult>( async () => { uint resultCount = 0; var dispatcher = Window.Current.Dispatcher; var result = await source.GetPagedItems(currentPage++, itemsPerPage); if(result == null || result.Count() == 0) { hasMoreItems = false; } else { resultCount = (uint)result.Count(); await Task.WhenAll(Task.Delay(10), dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { foreach (I item in result) this.Add(item); }).AsTask()); } return new LoadMoreItemsResult() { Count = resultCount }; }).AsAsyncOperation<LoadMoreItemsResult>(); } } var collection = new IncrementalLoadingCollection<LiveTextCode, LiveText>(); this.LTextLW.ItemsSource = collection; ,而LiveText是一个类,除其他功能外,还会将之前的UserForm设置为。

通过读取位于服务器中的XML文件来填充LiveTextCode,因此代码必须执行UserForm操作,为此,包含的范围也必须如此。由于一个未知的原因,自定义接口的实例在填充之前被调用,所以我得到UserForm(或者至少是对我来说最有意义的假设......)。

我很迷茫,我不知道如何修复它,如果有人能帮忙的话会非常感激。

提前致谢!

1 个答案:

答案 0 :(得分:0)

而不是使用this.LTextLW.ItemsSource = collection;
指定一个ObservableCollection项,说collection。现在将其绑定到您的ItemsSource="{Binding collection}",将其绑定到列表视图 由于它的集合值一旦更新就会成为ObservableCollection类型,它也会反映在您的视图中 否则,您还可以使用RaisePropertyChanged事件

指定一个集合
private IncrementalLoadingCollection<LiveTextCode, LiveText> _collection;
public IncrementalLoadingCollection<LiveTextCode, LiveText> collection
        {
            get { return _collection; }
            set
            {
                _collection = value;
                RaisePropertyChanged();
            }
        }

只要值发生变化,这将处理UI的更新。