在Xamarin MVVM应用程序中,如何从ViewModel更改屏幕上看到的内容?

在Xamarin MVVM应用程序中,如何从ViewModel更改屏幕上看到的内容?,xamarin,xamarin.forms,Xamarin,Xamarin.forms,My application viewModel响应用户单击按钮查看测试结果: private void AddDetailRows(List<QuizHistory> quizHistoryList) { quizDetails.Children.Clear(); quizDetails.Children.Add(AddData(quizHistoryList)); quizDetails.Children.Add(n

My application viewModel响应用户单击按钮查看测试结果:

    private void AddDetailRows(List<QuizHistory> quizHistoryList)
    {
        quizDetails.Children.Clear();
        quizDetails.Children.Add(AddData(quizHistoryList));
        quizDetails.Children.Add(new LineTemplate());
    }
private void AddDetailRows(列表)
{
quizDetails.Children.Clear();
quizDetails.Children.Add(AddData(quizStoryList));
quizDetails.Children.Add(newlinetemplate());
}
其中quizDetails是视图中元素的名称

但这对我来说不起作用,因为视图模型不知道视图是什么样子,也无权访问元素的名称


在MVVM应用程序中,这个问题是如何解决的?

您完全正确,这不是ViewModel的责任。 所以,无论您想对UI做什么,都不是ViewModel的责任。 如果这真的是唯一的选项,那么您可以考虑在VM中创建布尔属性并将它们绑定到视图,然后在绑定到VM的button click命令上将布尔值从false更改为true,反之亦然。 要简化它:

MyView.xaml

<StackLayout>
   <Button Command="{Binding ShowHideQuizHistoryCommand}" ... />
   <StackLayout x:Name="QuizHistory"
                IsVisible={Binding ShowQuizHistory }>
       //
   </StackLayout>
</StackLayout>
因此,这只是一个基于您提供的问题的示例。
您也可以使用可视状态、转换器、触发器和行为来实现这一点,但我认为这是最简单的方法。

您完全正确,这不是ViewModel的责任。 所以,无论您想对UI做什么,都不是ViewModel的责任。 如果这真的是唯一的选项,那么您可以考虑在VM中创建布尔属性并将它们绑定到视图,然后在绑定到VM的button click命令上将布尔值从false更改为true,反之亦然。 要简化它:

MyView.xaml

<StackLayout>
   <Button Command="{Binding ShowHideQuizHistoryCommand}" ... />
   <StackLayout x:Name="QuizHistory"
                IsVisible={Binding ShowQuizHistory }>
       //
   </StackLayout>
</StackLayout>
因此,这只是一个基于您提供的问题的示例。
您也可以使用视觉状态、转换器、触发器和行为来实现这一点,但在我看来,这是最简单的方法。

我认为类似的事情在这里已经讨论过,您想要添加什么样的元素?quizDetails是什么类型的元素?您可以创建该元素的自定义控件并对其进行必要的更改,类似于ListView的工作方式。。。正如@iSpain17所提到的,提供更多关于您试图清除的元素类型的详细信息,并且我认为类似的事情在这里讨论了您试图添加的元素类型?quizDetails是什么类型的元素?您可以创建该元素的自定义控件并对其进行必要的更改,类似于ListView的工作方式。。。正如@iSpain17所提到的,请提供有关您试图清除和添加的元素类型的更多详细信息