我已经实现了@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
(或者至少是对我来说最有意义的假设......)。
我很迷茫,我不知道如何修复它,如果有人能帮忙的话会非常感激。
提前致谢!
答案 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的更新。