WPF Нажмите кнопку и обновите текстовый блок для нового вопроса - PullRequest
0 голосов
/ 23 января 2019

Я создаю приложение в стиле обслуживания клиентов, у меня есть список вопросов, на которые мы хотим ответить простым ответом «Хорошо» или «Плохо». После ответа я хочу, чтобы текстовый блок перешел к следующему вопросу.Я пытался

private void GetQuestions()
        {
            HttpClient client = new HttpClient();
            client.BaseAddress = new Uri("https://***-***/api/v1/");
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            var response = client.GetAsync("EPOS/GetQuestions").Result;

            if (response.IsSuccessStatusCode)
            {
                var questionList = response.Content.ReadAsAsync<IEnumerable<Questions>>().Result;

                foreach (var question in questionList)
                {
                    QuestionsBox.FontFamily = new FontFamily("Consolas");
                    QuestionsBox.SetValue(TextElement.FontSizeProperty, 20.0);
                    QuestionsBox.Text = question.QuestionText;
                }
            }
            else
            {
                MessageBox.Show("Error Code" + response.StatusCode + " : Message - " + response.ReasonPhrase);
            }

        }

Я не могу понять, как сменить вопрос на следующий в списке из ответа кнопки.

1 Ответ

0 голосов
/ 23 января 2019

Я думаю, что у меня есть представление о том, чего вы хотите от этого вопроса, и это то, что отправляемый ответ побуждает вопрос перейти к следующему в списке.

MainWindowView:

<Window x:Class="TestWpfApplication.MainWindowView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        Title="MainWindow" 
        Height="450" 
        Width="800">

    <Window.Resources>
        <FontFamily x:Key="DefaultFont">Corbel</FontFamily>

        <Style TargetType="Button">
            <Setter Property="FontFamily" Value="{StaticResource DefaultFont}" />
            <Setter Property="FontSize" Value="50" />
        </Style>

        <Style TargetType="Label">
            <Setter Property="FontFamily" Value="{StaticResource DefaultFont}" />
            <Setter Property="FontSize" Value="20" />
            <Setter Property="VerticalAlignment" Value="Center"></Setter>
        </Style>
    </Window.Resources>

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition />
            <RowDefinition />
        </Grid.RowDefinitions>

        <Label Grid.Column="0" Grid.Row="1" HorizontalAlignment="Center" Content="{Binding Path=QuestionText}" />

        <Grid Grid.Column="1" Grid.Row="1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition />
                <ColumnDefinition />
            </Grid.ColumnDefinitions>

            <Button Grid.Column="0" Command="{Binding Path=YesCommand}" Content="Yes" />
            <Button Grid.Column="1" Command="{Binding Path=NoCommand}" Content="No" />
        </Grid>
    </Grid>
</Window>

MainWindowViewModel:

using System.Collections.Generic;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows.Input;
using TestWpfApplication.Annotations;

namespace TestWpfApplication
{
    internal class MainWindowViewModel : INotifyPropertyChanged
    {
        private RelayCommand _yesCommand;
        private RelayCommand _noCommand;
        private int _questionIndex;
        private string _questionText;
        private List<string> _questions;

        public MainWindowViewModel()
        {
            _questions = new List<string>
            {
                "Name your favourite football team",
                "Do you like F1",
                "Mothers Maiden Name",
                "Random Question"
            };

            QuestionText = _questions[_questionIndex];

            _yesCommand = new RelayCommand(o => Yes());
            _noCommand = new RelayCommand(o => No());
        }

        public string QuestionText
        {
            get => _questionText;
            set
            {
                _questionText = value;
                OnPropertyChanged(nameof(QuestionText));
            }
        }

        public ICommand YesCommand => _yesCommand;

        public ICommand NoCommand => _noCommand;

        public event PropertyChangedEventHandler PropertyChanged;

        [NotifyPropertyChangedInvocator]
        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }

        private void Yes()
        {
            // Logic for storing the answer to the question
            MoveToNextQuestion();
        }

        private void No()
        {
            // Logic for storing the answer to the question
            MoveToNextQuestion();
        }

        private void MoveToNextQuestion()
        {
            if (_questionIndex < _questions.Count - 1)
            {
                QuestionText = _questions[++_questionIndex];
            }
        }
    }
}

То, как вы получите список вопросов, полностью зависит от вас, а также то, как вы храните ответы, будет вашей собственной реализацией, но из этого простого решения вы сможете увидеть, как вы можете циклически проходить по списку вопросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...