MvvmCross中的复合视图

Composite views in MvvmCross

我有一个WPF MVVM应用程序,我想将其重构为使用MvvmCross支持Android实现的WPF和Mono。

我们应用程序的视图包括:

  • 始终可见的工具栏
  • 导航栏区域
  • 主视区
  • 弹出窗口区域

这些区域中的每个区域都是主应用程序窗口上的UserControl,而UiService只是交换每个区域中的视图。对于弹出窗口,它也只是主窗口上的UserControl,在对UiService的Show或Hide调用中,其可见性也会发生变化。 UiService还接受上下文参数,该上下文参数允许将状态信息传递到要显示的视图模型中。

主要视图通常是几个子视图的组合。在这些情况下,主视图模型将创建作为属性公开的子视图模型。主视图将这些属性设置为子视图的数据上下文。

我认为MvvmCross当然可以支持这种样式的复合视图,但是我找不到这样的例子。有相关的MvvmCross示例吗?在MvvmCross中实施的推荐方法是什么?


I would think that MvvmCross would certainly support this style composite views, but I couldn't find an example of such. Are there any relevant MvvmCross examples? What would be the recommended approach for implementing in MvvmCross?

这种观点不是移动应用程序的默认视图-大多数移动应用程序都是基于页面的。

但是,复合视图在平板电脑应用中变得越来越普遍-甚至移动应用也有例外-例如标签,全景图,弹出窗口等

为了允许不同类型的显示,每个MvvmCross UI平台都提供一个presenter,您可以根据需要进行自定义。

presenter类中,您可以选择如何呈现ViewModel和View。另外,由于它只是一个C#类,因此可以将此职责委派给所需的其他许多对象,从而使您可以构建越来越复杂的面板,弹出控件,选项卡,嵌入式导航堆栈等模式。

有关此的一些信息,包括一些示例的链接,请参阅此幻灯片组-https://speakerdeck.com/cirrious/presenters-in-mvvmcross

WPF和iOS TwitterSearch示例可能是一个开始的好地方-https://github.com/slodge/MvvmCross-Tutorials/tree/master/Sample%20-%20TwitterSearch


我创建了一个使用自定义演示器的插件,以允许将多个ViewModel与UserControls一起显示在同一页面上。它还允许常规的"视图"导航,因此您可以使用精确的视图模型在Wpf,Andoid Tablets,Windows Store或iPad上具有复合视图,并在移动设备上进行页面导航:

https://github.com/ChristianRuiz/MvvmCross-ControlsNavigation


请记住,您可以在任何给定命令上显示2个ViewModel。

例如,如果用户填写一个Login表单,然后您要加载复合UI,则显示导航栏视图模型和主视图模型。

然后,您可以创建一个自定义演示者来处理相应视图的布局。

听起来很简单(确实如此),但花了我一段时间才弄清楚。正如Stuart提到的,在TwitterSearch教程中演示的解决方案