private void LoadMore(bool clearValues = false) { EnsureInitialized(); Application.Current.Dispatcher.BeginInvoke((Action)(() => { if (needRefresh) { needRefresh = false; if (loadMoreTicket != null) { return; } this.loadMoreTicket = Busy.GetTicket(); Task.Run( async() => { var oldSelected = SelectedGame; if (clearValues) { this.gameResults.Clear(); } var newgames = new List <GameResultModel>(); var latest = (await gameRepository.ToListAsync( query => { query = query.Where(this.GetFilterExpression()); query = AddOrderByExpression(query); return(query.Skip(clearValues ? 0 : this.gameResults.Count) .Take(50)); })).ToModel(); totalCount = gameRepository.Query(x => x.Where(GetFilterExpression()).Count()); newgames.AddRange(latest); this.gameResults.AddRange(newgames); if (oldSelected != null) { var foundold = gameResults.FirstOrDefault(x => x.Id == oldSelected.Id); if (foundold != null) { SelectedGame = foundold; } else { SelectedGame = null; } } loadMoreTicket.Dispose(); loadMoreTicket = null; }); } }), DispatcherPriority.ContextIdle); }
private async Task LoadMore(bool clearValues = false) { await Application.Current.Dispatcher.BeginInvoke( (Action)(() => { if (needRefresh) { needRefresh = false; if (loadMoreTicket != null) { return; } this.loadMoreTicket = Busy.GetTicket(); Task.Run( async() => { if (clearValues) { this.arenaSessions.Clear(); } var newarenas = new List <ArenaSessionModel>(); var result = await arenaRepository.ToListAsync( query => { query = query.Where(GetFilterExpression()); query = AddOrderByExpression(query); return(query.Skip(clearValues ? 0 : this.arenaSessions.Count) .Take(50)); }); totalCount = arenaRepository.Query(x => x.Where(GetFilterExpression()).Count()); foreach (var arena in result.ToModel()) { newarenas.Add(arena); if (ArenaViewModel.IsOpen && ArenaViewModel.SelectedArenaSession != null && SelectedArenaSession != null && SelectedArenaSession.Id == arena.Id) { this.SelectedArenaSession = arena; } if (SelectedGame != null && EditGameViewModel.IsOpen && EditGameViewModel.SelectedGame != null && SelectedGame != null) { var hasgame = arena.Games.FirstOrDefault(x => x.Id == SelectedGame.Id); if (hasgame != null) { SelectedGame = hasgame; } } } this.arenaSessions.AddRange(newarenas); loadMoreTicket.Dispose(); loadMoreTicket = null; // does not work nicely //if (EditGameFlyout.IsOpen && EditGameFlyout.SelectedGame != null) //{ // Handle(new SelectedGameChanged(EditGameFlyout, EditGameFlyout.SelectedGame.Id)); //} //else //{ // if (ArenaViewModel.IsOpen && ArenaViewModel.SelectedArenaSession != null) // { // var selected = this.arenaSessions.FirstOrDefault(x => x.Id == ArenaViewModel.SelectedArenaSession.Id); // this.SelectedArenaSession = selected; // } //} }); } }), DispatcherPriority.ContextIdle); }