在一个页面中使用多个视图模型的MVVMCross

3

我正在使用Xamarin制作适用于多个平台的应用程序。该应用程序使用Mvvm结构和MvvmCross。

目前,我有各种视图模型,并且只要它们在单独的页面中就可以很好地绑定(使用MvvmCross)。

但是,我想制作一个引用多个视图模型的单个页面。例如,一个页面有几个按钮,每个按钮都绑定到不同视图模型中的方法。

我知道要做到这一点,我应该:

1)将屏幕分成不同的视图。

2)将按钮根据其视图模型分配给不同的视图。

我不确定如何分割屏幕?片段是答案吗?


另外,这是否意味着需要一个视图模型来了解页面中的所有视图模型?


我的当前解决方法是在所有页面中具有选项卡,以更改该页面的当前视图模型,如下所示:

public ICommand VM1Command
    {
        get { return new MvxCommand(() => ShowViewModel<ViewModel1>()); }
    }
    public ICommand VM2Command
    {
        get { return new MvxCommand(() => ShowViewModel<ViewModel2>()); }
    }
    public ICommand VM3Command
    {
        get { return new MvxCommand(() => ShowViewModel<ViewModel3>()); }
    }

这看起来相当丑陋,如果有人能指导我去哪里找到解释,甚至更好地告诉我如何做,我将不胜感激。

谢谢!


尝试观看http://www.youtube.com/watch?v=cYu_9rcAJU4 - 它揭穿了一些关于视图-视图模型的神话。 - Stuart
谢谢Stuart的评论!你的支持真是太棒了!我编辑了我的问题,现在(希望)包含了正确的术语。我相信我正在寻找的实际上是如何分割页面并在其中拥有多个视图。谢谢。 - YKa
1个回答

2

SpheroViewModel是在SpheroView中使用的(参见:SpheroView.cs)。此视图是MvxBindingTabActivityView。因此,它使用Android TabHost将子视图显示为选项卡。设置在第30-48行完成。对于每个SubViewModel,您都有一个自己的视图(例如SpheroAccelMovementView.cs),它绑定并显示单独的数据。

有关选项卡和MvvMCross以及不同平台的更多详细信息,请查看N = 25 - 视频教程。自斯图尔特录制视频以来,可能会有一些API更改。但它解释了选项卡和子视图模型的一般思想。


感谢@Sven-Michael Stube的回答。很抱歉之前我的问题表述不够清晰。如果我理解正确,在那个例子中每个视图模型都在不同的选项卡中,而我实际上想要在一个选项卡中放置几个视图模型。 - YKa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接