Esempio n. 1
0
        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);
        }