MVVM 数组在 xaml 视图中不更新

问题描述 投票:0回答:1

MVVM 新手。当我尝试在 MVVM 中绑定数组 ChoiceText[] 时,初始值显示在我的视图中,但更新后的值不会显示。

public partial class MainViewModel : ObservableObject
{
    private int _questionNumber = 0;
    private int _numberOfQuestions = 30;
    MainPage.quizQuestion _question = new MainPage.quizQuestion();

    [ObservableProperty]
    string _answerText = "no answer yet...";

    [ObservableProperty]
    string _questionText = "what's this a picture of?";

    [ObservableProperty]
    string _imagePath = "pic1_72dpi.jpg";

    [ObservableProperty]
    string[] _choiceText = {"1", "2", "3", "4"};

    private void LoadQuestion()
    {
        _question = LoadHardCodedQuestion(_questionNumber);
        QuestionText = _question.QText;
        AnswerText = string.Empty;
        ImagePath = _question.imagePath;
        for (int i = 0; i < _question.choices.Length; i++) { ChoiceText[i] = _question.choices[i]; }
    }
}

在我的 .xaml 查看代码隐藏中:

<Image Grid.Row="0"  Grid.ColumnSpan="2"
               Source="{Binding ImagePath}"
               BackgroundColor="Black"/>

<Label x:Name ="lblQuestion"
               Grid.Row="1"
               Text="{Binding QuestionText}"
               FontSize="18"
               VerticalOptions="Center"
               HorizontalOptions="Center"/>

<Button Text="{Binding ChoiceText[0]}" 
                Grid.Row="2" Grid.ColumnSpan="2"
                Style="{StaticResource defaultButtonStyle}"
                Command="{Binding SubmitAnswerCommand}" CommandParameter="1"/>
<Button Text="{Binding ChoiceText[1]}" 
                Grid.Row="3" Grid.ColumnSpan="2"
                Style="{StaticResource defaultButtonStyle}" 
                Command="{Binding SubmitAnswerCommand}" CommandParameter="2"/>
<Button Text="{Binding ChoiceText[2]}" 
                Grid.Row="4" Grid.ColumnSpan="2"
                Style="{StaticResource defaultButtonStyle}"
                Command="{Binding SubmitAnswerCommand}" CommandParameter="3"/>
<Button Text="{Binding ChoiceText[3]}" 
                Grid.Row="5" Grid.ColumnSpan="2"
                Style="{StaticResource defaultButtonStyle}" 
                Command="{Binding SubmitAnswerCommand}" CommandParameter="4"/>

<Label x:Name ="lblAnswer" IsVisible="True"
               Grid.Row="6"
               Text="{Binding AnswerText}"
               FontSize="18"
               VerticalOptions="Start"
               HorizontalOptions="Start"/> 

其他可观察属性在视图中更新,没有问题。

我可以将 ChoiceText[] 定义为 4 个唯一变量,ChoiceText1、ChoiceText2 等,但我希望能够绑定此数组以及可能更大的数组。难道是我没有正确绑定吗?

谢谢! 阿贝当

arrays xaml mvvm binding maui-community-toolkit
1个回答
0
投票

感谢您的反馈!

我在 ObservableArray 的社区工具包中找不到任何内容,但 ObservableCollection 看起来确实可以工作,尽管有点不同。

Rufo 爵士的答案对我来说非常有效——如果我分配 ChoiceText = _question.choices; ,而不是遍历数组的每个元素; _choiceText 可观察属性得到更新,每个数组元素也得到更新。完美,谢谢鲁福先生!

阿伯道恩

© www.soinside.com 2019 - 2024. All rights reserved.