private void UndoCommandHandler() { IsAcceptOpen = false; // If no one has scored we are at the start if (!_currentGameService.HasAnyOneScored(ParticipatingPlayers.ToList())) { return; } if (ParticipatingPlayers[_currentPlayer].DartsToThrow < 3) { // Score has not yet been accepted so just cancel the dialog RejectScoreCommandHandler(); return; } _currentPlayer--; if (_currentPlayer < 0) { _currentPlayer = ParticipatingPlayers.Count - 1; } if (!ParticipatingPlayers[_currentPlayer].UndoItems.Any()) { return; } _currentGameService.Undo(GetGameParameters()); ParticipatingPlayers[_currentPlayer].RemoveDartScores(); var turnNumber = ParticipatingPlayers[_currentPlayer].Scores[ParticipatingPlayers[_currentPlayer].Scores.Count - 1] .TurnNumber; for (var index = ParticipatingPlayers[_currentPlayer].Scores.Count - 1; index >= 0; index--) { var score = ParticipatingPlayers[_currentPlayer].Scores[index]; if (score.TurnNumber == turnNumber) { ParticipatingPlayers[_currentPlayer].Scores.Remove(score); } } SetCurrentPlayer(_currentPlayer); AnalyseScoreForHints(); }