我为支持 Windows 应用商店的 MvvmCross 应用程序创建了一个新的解决方案,并且我希望在 Windows 10 上支持 UWP。我已成功转移 PCL,但在使用提供的示例让基本 UWP 应用程序正常运行时遇到问题由 MS (NavigationMenu) 开发,它使用他们推荐的新导航/命令模型的 SplitView 和 AppShell 模式。我引用了一篇有用的博客文章 ( http://stephanvs.com/implementing-a-multi-region-presenter-for-windows-10-uwp-and-mvvmcross/ ),它为我提供了一些有关如何将 mvvmcross 集成到 AppShell 中的指导,但启动失败,因为 AppShell 没有定义有效的 Frame。 Frame 是一个只读属性,我一直无法看到它是在哪里设置的。
我正在使用 NavigationMenu 中的标准 AppShell 实现,并按照博文中的建议进行以下更改:
public sealed partial class AppShell : MvxWindowsPage // was Page
public Frame AppFrame { get { return this.Frame; } } // was this.frame
除了错误后的代码之外,设置没有任何差异。在查看 MvxWindowsPage 实现时,似乎没有什么特别的,因为它仍然调用 Page 初始化。我是否遗漏了一些明显的东西?
最佳答案
所以博客文章的链接是正确的,换句话说,您需要使用 MvvmCross 中的 MultiRegions 才能使其正常工作。 但博文没有显示完整的工作版本......
我在我的 github 上添加了一个: https://github.com/Depechie/MvvmCrossUWPSplitView
一些值得借鉴的建议,就像我在评论中所说的那样。
SplitView 将出现的 View 需要有一个属性来返回一个有效的 Frame,以便在注入(inject)新 View 时进行查找。这可以像 return (Frame)this.WrappedFrame.UnderlyingControl;
一样返回,在代码 https://github.com/Depechie/MvvmCrossUWPSplitView/blob/master/MvvmCrossUWP.Win/Views/FirstView.xaml.cs#L13 中找到
您想要在 SplitView 中加载的所有 View 都需要引用您在该 SplitView 中定义的区域,在我的例子中,我将其命名为 FrameContent,如下所示 https://github.com/Depechie/MvvmCrossUWPSplitView/blob/master/MvvmCrossUWP.Win/Views/FirstView.xaml#L48
因此,请在所有要加载的 View 中使用该名称作为区域属性,如 [MvxRegion("FrameContent")]
示例 https://github.com/Depechie/MvvmCrossUWPSplitView/blob/master/MvvmCrossUWP.Win/Views/SecondView.xaml.cs#L7
关于MvvmCross 4 对 UWP 的支持,AppShell 缺少框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33782456/