MvvmCross中的复合视图

时间:2013-05-13 04:15:40

标签: mvvmcross

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

我们的申请意见包括:

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

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

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

我认为MvvmCross肯定会支持这种风格的复合视图,但我找不到这样的例子。有没有相关的MvvmCross示例?在MvvmCross中实施的推荐方法是什么?

3 个答案:

答案 0 :(得分:6)

  

我认为MvvmCross肯定会支持这种风格的复合视图,但我找不到这样的例子。有没有相关的MvvmCross示例?在MvvmCross中实施的推荐方法是什么?

此类视图不是移动应用的默认视图 - 大多数移动应用都是基于页面的。

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

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

您可以在此presenter类中选择要呈现ViewModel和Views的方式。此外,由于它只是一个C#类,它可以将此责任委托给任意数量的其他对象,允许您构建越来越复杂的面板,弹出窗口,选项卡,嵌入式导航堆栈等模式。

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

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

答案 1 :(得分:2)

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

例如,如果用户完成了登录表单并且您要加载复合UI,则显示导航栏视图模型和主视图模型。

然后,您可以创建自定义演示者以传递相应视图的布局。

这听起来很简单(而且确实如此),但我花了一段时间才弄明白。该解决方案在Twitter的教程中演示为Stuart提及

答案 2 :(得分:2)

我创建了一个使用自定义展示器的插件,允许多个ViewModel与UserControls显示在同一页面上。它还允许通常的视图导航,因此您可以使用精确的视图模型在Wpf,Andoid平板电脑,Windows应用商店或iPad上以及移动设备上的页面导航上显示复合视图:

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