I am doing data virtualization using VirtualQueryableCollectionView.
I pass there IQueryable from EF.
var db =
new
ProductionContext();
IQueryable cards = db.Cards.OrderBy(x => x.CardId);
var view =
new
VirtualQueryableCollectionView(cards) { LoadSize = 50 };
cardsRadGridView.ItemsSource = view;
Its works fine. But how to make it asynchronous? (asynchronous loading, search, filtering) I searched for examples but found only examples for WCF like bellow
https://www.telerik.com/blogs/telerik-data-virtualization-wcf-ria-services-and-visual-studio-async-ctp?_ga=2.125533513.2135094116.1586865074-1480584776.1567419497
I tried to do the same for the EF
var db =
new
ProductionContext();
IQueryable cards = db.Cards.OrderBy(x => x.CardId);
Loaded += async (o, args) =>
{
var view =
new
VirtualQueryableCollectionView<Card>
{
LoadSize = 50,
VirtualItemCount = await TaskEx.Run(() => cards.Count())
};
view.FilterDescriptors.CollectionChanged += async (s, e) =>
{
view.VirtualItemCount = await
TaskEx.Run(() => cards.Where(view.FilterDescriptors).Count());
};
view.FilterDescriptors.ItemChanged += async (s, e) =>
{
view.VirtualItemCount = await
TaskEx.Run(() => cards.Where(view.FilterDescriptors).Count());
};
view.ItemsLoading += async (s, e) =>
{
var queryToLoad = cards
.Sort(view.SortDescriptors)
.Where(view.FilterDescriptors)
.Skip(e.StartIndex)
.Take(e.ItemCount);
cardsRadGridView.IsBusy =
true
;
view.Load(e.StartIndex, await TaskEx.Run(() => queryToLoad.ToIList()));
cardsRadGridView.IsBusy =
false
;
};
cardsRadGridView.ItemsSource = view;
};
but it does not work(
Where can one find a good example of implementing this?