private void NextIssue(object o) { CurrentIssue.IsAnswered = true; // Save answer var isCorrect = false; switch (IssueType) { case IssueTypes.Selection: { // ReSharper disable PossibleNullReferenceException var selectedByUserIssueIndex = Answers.IndexOf(Answers.First(a => a.SelectedByUser)) + 1; var correctIssueIndex = CurrentIssue.Answers.IndexOf(CurrentIssue.Answers.First(a => a.IsCorrect)) + 1; // ReSharper restore PossibleNullReferenceException AppController.UserInfo.Answers[_currentSet].Add(new UserAnswer { IsCorrect = (isCorrect = selectedByUserIssueIndex == correctIssueIndex), Answer = selectedByUserIssueIndex.ToString("0"), CorrectAnswer = correctIssueIndex.ToString("0"), Points = CurrentIssue.CorrectAnswerPoints }); } break; case IssueTypes.SelectionInImage: AppController.UserInfo.Answers[_currentSet].Add(new UserAnswer { IsCorrect = (isCorrect = UserAnswer == CorrectAnswer), Answer = UserAnswer.ToString("0"), CorrectAnswer = CorrectAnswer.ToString("0"), Points = CurrentIssue.CorrectAnswerPoints }); break; case IssueTypes.ImageSelection: { // ReSharper disable AssignNullToNotNullAttribute var userSelection = Answers.Where(a => a.SelectedByUser).Select(a => a.OriginalImageFileName).ToList(); var correctSelection = CurrentIssue.Answers.Where(a => a.Selected).Select(a => a.ImageFileName).ToList(); // ReSharper restore AssignNullToNotNullAttribute AppController.UserInfo.Answers[_currentSet].Add(new UserAnswer { IsCorrect = (isCorrect = userSelection.Count == correctSelection.Count && userSelection.All(correctSelection.Contains)), Answer = string.Empty, CorrectAnswer = string.Empty, Points = CurrentIssue.CorrectAnswerPoints }); } break; case IssueTypes.Order: AppController.UserInfo.Answers[_currentSet].Add(new UserAnswer { // ReSharper disable AssignNullToNotNullAttribute IsCorrect = (isCorrect = !Answers.Where((answer, index) => answer.OrderNo != index).Any()), // ReSharper restore AssignNullToNotNullAttribute Answer = string.Empty, CorrectAnswer = string.Empty, Points = CurrentIssue.CorrectAnswerPoints }); break; case IssueTypes.Placement: isCorrect = PlacementCorrectAnswer1.Count == CurrentIssue.PlacementCorrectAnswer1.Count && !PlacementCorrectAnswer1.Where( (imageFileName, index) => imageFileName != Path.Combine(_currentDirectory, CurrentIssue.PlacementCorrectAnswer1[index])).Any(); isCorrect &= PlacementCorrectAnswer2.Count == CurrentIssue.PlacementCorrectAnswer2.Count && !PlacementCorrectAnswer2.Where( (imageFileName, index) => imageFileName != Path.Combine(_currentDirectory, CurrentIssue.PlacementCorrectAnswer2[index])).Any(); isCorrect &= NumberOfShelves < 3 || (PlacementCorrectAnswer3.Count == CurrentIssue.PlacementCorrectAnswer3.Count && !PlacementCorrectAnswer3.Where( (imageFileName, index) => imageFileName != Path.Combine(_currentDirectory, CurrentIssue.PlacementCorrectAnswer3[index])).Any()); isCorrect &= NumberOfShelves < 4 || (PlacementCorrectAnswer4.Count == CurrentIssue.PlacementCorrectAnswer4.Count && !PlacementCorrectAnswer4.Where( (imageFileName, index) => imageFileName != Path.Combine(_currentDirectory, CurrentIssue.PlacementCorrectAnswer4[index])).Any()); isCorrect &= NumberOfShelves < 5 || (PlacementCorrectAnswer5.Count == CurrentIssue.PlacementCorrectAnswer5.Count && !PlacementCorrectAnswer4.Where( (imageFileName, index) => imageFileName != Path.Combine(_currentDirectory, CurrentIssue.PlacementCorrectAnswer5[index])).Any()); AppController.UserInfo.Answers[_currentSet].Add(new UserAnswer { IsCorrect = isCorrect, Answer = string.Empty, CorrectAnswer = string.Empty, Points = CurrentIssue.CorrectAnswerPoints }); break; } if (isCorrect) { AppController.UserInfo.CorrectAnswers[_currentSet]++; AppController.UserInfo.CorrectAnswerPoints[_currentSet] += CurrentIssue.CorrectAnswerPoints; } else { AppController.UserInfo.IncorrectAnswers[_currentSet]++; } // Go to the either next issue or result page var issue = GetNextIssue(); if (issue == null) { var page = o as Page; if (page != null && page.NavigationService != null) { page.NavigationService.Navigate(AppController.GetPage(ApplicationPages.ResultPage)); } } else { SetNewIssue(issue); } }
public bool Evaluate() { return(Response.ToString() == CorrectAnswer.ToString()); }