2014-05-09 42 views
2

我正在尝试使用Xamarin为多个平台创建应用程序。该应用程序使用Mvvm结构和MvvmCross。单个页面中的多个视图模型mvvmcross

目前,我有各种视图模型,他们都绑定很大(使用MvvmCross),只要他们在单独的页。

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

我明白,要做到这一点我应该:

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>()); } 
    } 

这是很丑陋,我真的很感激,如果任何人都可以参考我到某个地方解释,甚至更好告诉我如何去做。

干杯!

+0

尝试http://www.youtube.com/watch?v=cYu_9rcAJU4 - 揭穿一些视图模型的神话 – Stuart

+0

谢谢斯图尔特的评论!你的支持真的很棒!我编辑我的问题(希望)现在包含正确的术语。我相信我正在寻找的是实际上如何划分页面并在其中有多个视图。谢谢 – YKa

回答

2

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

有关Tabs和MvvMCross和不同平台的更多详细信息,请参阅N = 25 - Video Tutorial。由于斯图尔特已经录制了视频,因此有或许一些API更改。但它解释了选项卡和子视图模型的总体思路。

+0

谢谢@ Sven-Michael Stube的回答。我很抱歉,我之前的问题不太清楚。如果我在该示例中正确理解了每个视图模型都在不同的选项卡中,那么我实际上只需要一个选项卡中的几个视图模型。 – YKa