Мое приложение viewModel отвечает на нажатие пользователем кнопки, чтобы увидеть результаты теста:
private void AddDetailRows(List<QuizHistory> quizHistoryList)
{
quizDetails.Children.Clear();
quizDetails.Children.Add(AddData(quizHistoryList));
quizDetails.Children.Add(new LineTemplate());
}
Где quizDetails — это имя элемента в представлении.
Но у меня это не работает, так как модель представления не знает, как выглядит представление, и не имеет доступа к именам элементов.
Как решается эта проблема в приложении MVVM?
Какие элементы вы пытаетесь добавить? А что за элемент quizDetails?
Вы можете создать пользовательский элемент управления элемента и внести в него необходимые изменения, аналогично тому, как работает ListView... как уже упоминал @iSpain17, предоставить более подробную информацию о том, какой тип элемента вы пытаетесь очистить и добавить





Вы совершенно правы, это не то, за что отвечает ViewModel. Итак, все, что вы хотите сделать с пользовательским интерфейсом, не является обязанностью ViewModel. Если это действительно единственный вариант, то вы можете подумать о создании логических свойств в вашей виртуальной машине и привязке их к вашим представлениям, а затем изменить это логическое значение с ложного на истинное или наоборот по команде нажатия кнопки, которая привязана к вашей виртуальной машине. Чтобы упростить это:
MyView.xaml
<StackLayout>
<Button Command = "{Binding ShowHideQuizHistoryCommand}" ... />
<StackLayout x:Name = "QuizHistory"
IsVisible = {Binding ShowQuizHistory }>
//
</StackLayout>
</StackLayout>
MyViewModel.cs
private bool _showQuizHistory ;
public bool ShowQuizHistory
{
get { return _showQuizHistory ; }
set
{
_showQuizHistory = value;
OnPropertyChanged();
}
}
public ICommand ShowHideQuizHistoryCommand => new Command(() =>
{
ShowQuizHistory = !ShowQuizHistory;
});
Итак, это всего лишь пример, основанный на том, что вы предоставили в вопросе. Вы также можете использовать визуальные состояния, преобразователи, триггеры и поведения, чтобы добиться этого, но, на мой взгляд, это самый простой способ.
Я думаю, что подобные вещи обсуждались здесь stackoverflow.com/questions/11246715/…