public NewGameViewModel()
        {
            Players = new ObservableCollectionExtended <string>();

            var canStart = Players.ToObservableChangeSet().CountChanged().Select(_ => Players.Count >= 3);

            StartGame      = ReactiveCommand.Create(() => { }, canStart);
            RandomizeOrder = ReactiveCommand.Create(
                () =>
            {
                using (Players.SuspendNotifications())
                {
                    var r        = new Random();
                    var newOrder = Players.OrderBy(x => r.NextDouble()).ToList();
                    Players.Clear();
                    Players.AddRange(newOrder);
                }
            },
                canStart);

            RemovePlayer = ReactiveCommand.Create <string>(player => Players.Remove(player));
            var canAddPlayer = this.WhenAnyValue(
                x => x.Players.Count,
                x => x.NewPlayerName,
                (count, newPlayerName) => count < 7 && !string.IsNullOrWhiteSpace(newPlayerName) && !Players.Contains(newPlayerName));

            AddPlayer = ReactiveCommand.Create(
                () =>
            {
                Players.Add(NewPlayerName.Trim());
                NewPlayerName = string.Empty;
            },
                canAddPlayer);
        }
        public void AddPlayer(Func <bool> AddToCurrentRound, Action <string> ErrorAction)
        {
            if (NewPlayerName.Trim() == string.Empty)
            {
                ErrorAction("Enter a player's name");
                return;
            }
            else if (Players.PlayerExists(NewPlayerName))
            {
                ErrorAction("Player already exists");
                return;
            }

            var player = Players.NewPlayer(NewPlayerName, NewPlayerGender, NewPlayerSkill.Name);

            if (Tournament.Rounds.Count > 0 && AddToCurrentRound())
            {
                Tournament.AddPlayerToLastRound(player);
            }

            ResetNewPlayerSection();
        }