MvvmCross 4 对 UWP 的支持,AppShell 缺少框架

标签 mvvmcross uwp splitview

我为支持 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/

相关文章:

xamarin.ios - 如何使用 mvvmcross 双向绑定(bind)到 UITextView 控件?

ios - 是否可以在拆分模式下为屏幕的全宽在键盘上方创建 inputAccessoryView?

mobile - Kendo ui 移动分屏导航问题

xamarin - 如何通过 Xamarin MvvmCross 中的 BottomNavigationView 在 View 模型之间导航

java - Xamarin、Android Activity 、IntentFilter、打开表单 View

android - 如何使 MvxGridView 高效且高性能?

C# UWP 轮播选择更改

c# - 内部企业 AD(事件目录)

c# - Windows 10 UWP,NavigationView 在 BackNavigation 上更新选定的 MenuItem