VirtualQueryableCollectionView
When working with the UI components that enable UI Virtualization, you may take advantage of the above mentioned technique by usingVirtualQueryableCollectionView class. It enables you to benefit from the on-demand data loading to smooth scrolling with UI virtual components.
The VirtualQueryableCollectionView provides you with the following important members:
-
LoadSize property - defines the maximum number of items requested at once;
-
VirtualItemCount property – defines the total number of items available on the server-side;
-
ItemsLoading event – will be raised when the collection is requesting item at some index and this item is not already loaded. The arguments in this event are as follows:
-
StartIndex – requested item index;
-
ItemCount - number of requested items (can be less than or equal to the LoadSize).
public MainWindow() { InitializeComponent(); var context = new NorthwindEntities(); var query = context.Order_Details.OrderBy(o => o.OrderID); var view = new VirtualQueryableCollectionView(query) { LoadSize = 10 }; DataContext = view; }
另外一种写法;
public MainPage() { InitializeComponent(); var context = new NorthwindDomainContext(); var query = context.GetOrder_DetailsQuery().OrderBy(o => o.OrderID); query.IncludeTotalCount = true; var view = new VirtualQueryableCollectionView() { LoadSize = 10, VirtualItemCount = 100 }; view.ItemsLoading += (s, e) => { context.Load<Order_Detail>(query.Skip(e.StartIndex).Take(e.ItemCount)).Completed += (sender, args) => { var lo = (LoadOperation)sender; if (lo.TotalEntityCount != -1 && lo.TotalEntityCount != view.VirtualItemCount) { view.VirtualItemCount = lo.TotalEntityCount; } view.Load(e.StartIndex, lo.Entities); }; }; DataContext = view; }