public DraftLotteryViewModel(GameCore core, League league) : base(core)
        {
            ViewHeading = "Draft Lottery";
            this.league = league;
            this.nextPickNumber = 1;

            Teams = new UpdatableObservableCollection<TeamViewModel>(league.Teams.Select(team => team.ToViewModel(core)));

            NextDraw = new RelayCommand(() =>
            {
                var team = Teams.Where(x => x.DraftOrder == 0).GetRandom();

                if (team != null)
                {
                    team.DraftOrder = nextPickNumber;
                    nextPickNumber++;
                    Teams.UpdateCollection();
                }

                if (Teams.All(x => x.DraftOrder > 0))
                {
                    UpdateLeague();
                }
            });
        }
        public PlayerDraftRoundViewModel(GameCore core, League league, int roundNumber)
            : base(core)
        {
            RoundNumber = roundNumber;

            DraftPicks = new UpdatableObservableCollection<DraftCardViewModel>();

            this.league = league;

            InitializeDraftPicks();
        }
        public DraftLeagueViewModel(GameCore core, League league)
            : base(core)
        {
            this.league = league;

            var draftLotteryVm = new DraftLotteryViewModel(core, league);

            draftLotteryVm.DraftLotteryComplete += () =>
            {
                var draftedPlayers = core.GameState.Leagues.SelectMany(l => l.Teams.SelectMany(t => t.DraftCards.Select(d => d.Player)));

                var playerDraftVm = new PlayerDraftMasterViewModel(core, league, player => !draftedPlayers.Any(draftedPlayer => draftedPlayer != null && draftedPlayer.ID == player.ID));
                ChildViews.Add(playerDraftVm);
                NotifyPropertyChanged("ChildViews");
            };

            ChildViews.Add(draftLotteryVm);
        }
        public PlayerDraftMasterViewModel(GameCore core, League league, Func<Player, bool> playerFilter = null)
            : base(core)
        {
            this.league = league;
            this.draftService = new NaiveDraftService();

            Teams = new ObservableCollection<TeamViewModel>();
            DraftRounds = new UpdatableObservableCollection<PlayerDraftRoundViewModel>(new List<PlayerDraftRoundViewModel>());

            IEnumerable<Player> availablePlayers = core.GameState.DraftPool.AvailablePlayers;

            if (playerFilter != null)
            {
                availablePlayers = availablePlayers.Where(playerFilter);
            }

            AvailablePlayers = new ObservableCollection<Player>(availablePlayers);
            ViewHeading = "Player Draft";

            NextPick = new RelayCommand(ProcessNextPick);
            DraftPlayer = new RelayCommand(ProcessDraftPick);
            AutomatePicks = new RelayCommand(() =>
            {
                while (CanDraftPlayer || CanGoToNextPick)
                {
                    if (CanDraftPlayer)
                    {
                        ProcessDraftPick();
                    }
                    if (CanGoToNextPick)
                    {
                        ProcessNextPick();
                    }
                }
            });

            Reload(core);

            ProcessNextPick();
            SelectHumanTeamIfSingle();
        }