MvvmCross中的复合视图

8
我有一个WPF MVVM应用程序,想要重新设计使用MvvmCross以支持WPF和Mono for Android实现。
我们的应用程序视图包括:
- 一个始终可见的工具栏 - 一个导航栏区域 - 一个主视图区域 - 一个弹出窗口区域
每个区域都是主应用程序窗口上的UserControl,而UiService只是在每个区域中交换视图。对于弹出窗口,它也只是主窗口上的一个UserControl,其可见性会因为UiService的Show或Hide调用而发生变化。UiService还接受一个上下文参数,允许状态信息传递到要显示的视图模型中。
主视图通常是几个子视图的组合。在这些情况下,主视图模型创建子视图模型并将其公开为属性。主视图将这些属性设置为子视图的数据上下文。
我认为MvvmCross肯定支持这种复合视图样式,但我找不到这样的示例。是否有相关的MvvmCross示例?在MvvmCross中实现的推荐方法是什么?
3个回答

6
我认为MvvmCross肯定支持这种样式的复合视图,但我找不到这样的示例。是否有任何相关的MvvmCross示例?在MvvmCross中实现的推荐方法是什么?
这种视图风格不是移动应用程序的默认视图 - 大多数移动应用程序都是基于页面的。
然而,在平板电脑应用程序中,复合视图变得越来越普遍 - 即使移动应用程序也有其例外 - 例如选项卡、全景、飞出等。
为了允许不同类型的显示,每个MvvmCross UI平台都提供了一个presenter,您可以根据需要自定义它。
这个presenter类是您可以选择如何呈现您的ViewModels和Views的地方。此外,由于它只是一个C#类,因此它可以将这个责任委托给任意数量的其他对象,从而允许您构建越来越复杂的面板、飞出、选项卡、嵌入式导航堆栈等模式。
有关此信息的一些信息,包括一些示例链接,请参见此幻灯片https://speakerdeck.com/cirrious/presenters-in-mvvmcross

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


只是一个提醒...在示例 - TwitterSearch中使用的Twitter API已经过时了。Twitter REST API v1不再活跃,请迁移到API v1.1。https://dev.twitter.com/docs/api/1.1/overview. - Syska

3

请记住,您可以在任何给定的命令中显示2个ViewModels。

例如,如果用户完成登录表单并希望加载复合UI,则显示导航栏ViewModel和主ViewModel。

然后,您可以创建自定义Presenter来处理相应视图的布局。

这听起来很简单(而且确实如此),但我花了一些时间才弄清楚。 Stuart在TwitterSearch教程中演示的解决方案如下:


2
我创建了一个插件,它使用自定义的Presenter,允许多个ViewModel显示在同一页上作为UserControls。它还允许常规的View导航,因此您可以使用精确的ViewModel来在Wpf、Android平板电脑、Windows Store或iPad上创建复合视图,并在移动设备上进行页面导航。
链接:https://github.com/ChristianRuiz/MvvmCross-ControlsNavigation

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