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 等,但我希望能够绑定此数组以及可能更大的数组。难道是我没有正确绑定吗?
谢谢! 阿贝当
感谢您的反馈!
我在 ObservableArray 的社区工具包中找不到任何内容,但 ObservableCollection 看起来确实可以工作,尽管有点不同。
Rufo 爵士的答案对我来说非常有效——如果我分配 ChoiceText = _question.choices; ,而不是遍历数组的每个元素; _choiceText 可观察属性得到更新,每个数组元素也得到更新。完美,谢谢鲁福先生!
阿伯道恩