Ксамарин.Формы Обновляют Этикетку привязки внутри карусели

#c# #xamarin.forms

Вопрос:

У меня есть такой ярлык:

 <Label x:Name="QuestionText" FontSize="62" Text="{Binding question}" HorizontalTextAlignment="Center" Padding="0,20,0,0" />
 

Это внутри карусели:

 <CarouselView
            x:Name="Questions"
            HeightRequest="475">
            <CarouselView.ItemTemplate>
                <DataTemplate>
                    <StackLayout HorizontalOptions="Center" Padding="10">
                        <Label x:Name="QuestionText" FontSize="62" Text="{Binding question}" HorizontalTextAlignment="Center" Padding="0,20,0,0" />
                    </StackLayout>
                </DataTemplate>
            </CarouselView.ItemTemplate>
        </CarouselView>
 

И я заполняю карусель таким образом:

 protected override async void OnAppearing()
        {
            base.OnAppearing();

            questions = await webService.GetTaskQuestions(taskcategory);

            List<QuestionsClass> currentPage = new List<QuestionsClass>();

            currentPage.Add(questions[currentPageIndex]);

            Questions.ItemsSource = currentPage;


        }
 

И я пытаюсь обновить свой текст вот так:

 questions[currentPageIndex].question = questions[currentPageIndex].question.Replace("_", questions[currentPageIndex].answer);
 

Я даже пытался:

 Device.BeginInvokeOnMainThread(() =>
                    {
                        questions[currentPageIndex].question = questions[currentPageIndex].question.Replace("_", questions[currentPageIndex].answer);

                    });
 

И все равно ничего, вот мой класс:

 public class QuestionsClass
    {
        
        public string question { get; set; }
        public string answer { get; set; }
        
    }
 

Как обновить метку внутри карусели?

Обновить

Я пробовал с INotifyPropertyChanged:

 public class QuestionsClass : INotifyPropertyChanged
    {

        public event PropertyChangedEventHandler PropertyChanged;


        public string question { get; set; }
        public string actualQuestion
        {
            get
            {
                return question;
            }
            set
            {
                question = value;
                OnPropertyChanged();
                
            }
        }
        public string answer { get; set; }

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

    }
 

Вот мой лейбл:

 <Label FontSize="62" Text="{Binding actualQuestion}" HorizontalTextAlignment="Center" Padding="0,20,0,0" />
 

и вот как я его обновляю:

 questions[currentPageIndex].question = questions[currentPageIndex].question.Replace("_", questions[currentPageIndex].answer);
 

Обновить

Мой класс был неправильным, это правильный класс, и сейчас он работает:

 public class QuestionsClass : INotifyPropertyChanged
    {

        public event PropertyChangedEventHandler PropertyChanged;

        private string _question;

        public string question {
            get
            {
                return _question;
            }
            set
            {
                _question = value;
                NotifyPropertyChanged("question");
            }
        }
        public string answer { get; set; }
       
        private void NotifyPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }

    }
 

Комментарии:

1. Вы обновляете переменную вопросов (в нижнем регистре). Почему бы вам не попробовать обновить вопросы. CurrentItem (вид карусели). Также я рекомендую вам изменить название карусели, чтобы лучше их отличать

2. Кроме того, я бы рекомендовал создать коллекцию ObservableCollection<QuestionsClass> и привязать свой carrouselview непосредственно к этому

3. если вы пытаетесь динамически обновлять пользовательский интерфейс, QuestionsClass необходимо реализовать INotifyPropertyChanged

4. @Jason как мне применить это к своему классу, я видел примеры, но это очень запутанно

5. существует 10 000 существующих примеров, и мне нет смысла писать для вас еще один. Здесь показано все, что вам нужно сделать, на одной странице: docs.microsoft.com/en-us/dotnet/desktop/wpf/data/…