or

public async void LoadData() { VirtualCollectionPays = new VirtualQueryableCollectionViewExtended<Pay>() { LoadSize = SizePage }; VirtualCollectionPays.ItemsLoading += VirtualCollectionPays_ItemsLoading; PayDataPage datapager = null; var slowTask = Task.Run(() => { datapager = _dataProvider.GetQueryableLazyPay(SizePage, position, PayFilterDescriptor, PaySortDescriptor, PayGroupDescriptor); }); await slowTask; VirtualCollectionPays.VirtualItemCount = datapager.TotalCount; VirtualCollectionPays.Load(0, datapager.DataItems); }async void VirtualCollectionPays_ItemsLoading(object sender, VirtualQueryableCollectionViewItemsLoadingEventArgs e) { BusyIndicatorGrid = true; try { PayDataPage datapager = null; ItemsLoading = Task.Run(() => { datapager = _dataProvider.GetQueryableLazyPay(SizePage, e.StartIndex, PayFilterDescriptor, PaySortDescriptor, PayGroupDescriptor); }); await ItemsLoading; VirtualCollectionPays.Load(e.StartIndex, datapager.DataItems); BusyIndicatorGrid = false; } catch (Exception ex) { string mg = ex.Message; } }void radGridViewPay_SelectionChanged(object sender, SelectionChangeEventArgs e) { var VMListePay = this.DataContext as VMListePay; radGridViewPay.ScrollIndexIntoView(VMListePay.VirtualCollectionPays.CurrentPosition); }void VirtualCollectionPays_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { var VMListePay = this.DataContext as VMListePay; if (e.PropertyName == "CurrentPosition") { if (VMListePay.VirtualCollectionPays.CurrentPosition >= 0) { radGridViewPay.ScrollIndexIntoView(VMListePay.VirtualCollectionPays.CurrentPosition); } } }