8

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

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

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

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

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

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

4

3 回答 3

6

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

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

然而,复合视图在平板电脑应用程序中变得越来越普遍——甚至移动应用程序也有例外——例如选项卡、全景图、弹出窗口等

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

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

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

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

于 2013-05-14T09:25:52.593 回答
3

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

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

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

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

于 2013-05-17T19:55:50.610 回答
2

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

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

于 2013-12-16T22:31:51.423 回答