public void Load(IChoice choice)
        {
            if (choice == null)
            {
                throw new ArgumentNullException("choice");
            }

            this.choice  = choice;
            this.payment = null;

            this.choiceViewModel = new ChoiceItemViewModel(this.Dispatcher, choice);
            this.isValid         = false;
            this.isCancelled     = false;
            this.statusText.Text = string.Empty;

            choiceContainer.DataContext         = choiceViewModel;
            choiceChildrenContainer.ItemsSource = choiceViewModel.Children;


            var questionViewModel = choiceViewModel.Children.FirstOrDefault();

            if (questionViewModel == null)
            {
                return;
            }

            if (!HasMultipleDescendants(questionViewModel))
            {
                ChooseRequiredAnswers(questionViewModel);
            }
        }
        private void ChooseParent(ChoiceItemViewModel viewModel)
        {
            if (viewModel.Parent == null)
            {
                return;
            }

            viewModel.Parent.IsChosen = true;

            ChooseParent(viewModel.Parent);
        }
        private void ChooseRequiredAnswers(ChoiceItemViewModel viewModel)
        {
            if (viewModel.Children.Count() != 1)
            {
                return;
            }

            var first = viewModel.Children.First();

            first.IsChosen = true;
            ChooseParent(first);

            var childOfFirst = first.Children.FirstOrDefault();

            if (childOfFirst != null)
            {
                ChooseRequiredAnswers(childOfFirst);
            }
        }
        private bool HasMultipleDescendants(ChoiceItemViewModel viewModel)
        {
            var count = viewModel.Children.Count();

            if (count == 0)
            {
                return(false);
            }
            else if (count == 1)
            {
                var first        = viewModel.Children.First();
                var childOfFirst = first.Children.FirstOrDefault();
                if (childOfFirst != null)
                {
                    return(HasMultipleDescendants(childOfFirst));
                }

                return(false);
            }
            else
            {
                return(true);
            }
        }