MVVM Cross ShowViewModel不适用于自定义UWP

时间:2015-08-27 20:56:12

标签: xamarin mvvmcross uwp

我参考了this StackOverflow问题,关于MVVM Light:

  

我想尝试一个汉堡菜单样式导航(见这个   样品)。应用程序由Microsoft提供有关如何执行此操作的示例):

     

1-在我的所有页面中共享一个方便的解决方案。例子   上面提到的使用AppShell页面作为应用程序的根目录   一个框架,它封装了导航菜单和一些行为   后退按钮。那将是理想的。

     

2-使用MVVM-Light导航服务处理所有导航   从我的视图模型很方便。

以下是App.xml.Cs如何初始化shell页面onLaunched:

 protected override void OnLaunched(LaunchActivatedEventArgs e)
    {
        var shell = Window.Current.Content as AppShell;

        // Do not repeat app initialization when the Window already has content,
        // just ensure that the window is active
        if (shell == null)
        {
            // Create a AppShell to act as the navigation context and navigate to the first page
            shell = new AppShell();

            // Set the default language
            shell.Language = ApplicationLanguages.Languages[0];

            shell.AppFrame.NavigationFailed += OnNavigationFailed;
        }

        // Place our app shell in the current Window
        Window.Current.Content = shell;

        if (shell.AppFrame.Content == null)
        {
            // When the navigation stack isn't restored, navigate to the first page
            // suppressing the initial entrance animation.
            var setup = new Setup(shell.AppFrame);
            setup.Initialize();

            var start = Mvx.Resolve<IMvxAppStart>();
            start.Start();
        }

        // Ensure the current window is active
        Window.Current.Activate();
    }

问题是,只要我浏览AppShell提供的菜单,一切正常。但是MVVM Cross的ShowViewModel没有任何效果。 如果将shell作为Frame或AppShell上设置的框架传递,我认为不应该有任何区别。 有没有人知道我能做些什么,或者是否有一个带有MVVM交叉的工作汉堡菜单的例子?

如果您需要更好的概述,那么存储库在GitHub上是开源的。

https://github.com/Apply-Solutions/MoneyManager

我使用MVVM Cross v4.0.0.0-beta1。 Beta2目前还有另一个阻止在UWP中构建的问题。

由于 NPadrutt

2 个答案:

答案 0 :(得分:0)

不完全确定您要做什么,但是您可能需要使用MvvmCross作为框架在UWP应用中使用汉堡包菜单导航页面,是一个自定义演示者,它处理ShowViewModel方法,并在汉堡包容器视图中显示所请求的ViewModel的关联视图。

答案 1 :(得分:0)

哦,这令人尴尬。问题是无法解析ViewModel的视图。原因是我没有将页面中的继承替换为视图:MvxWindowsPage。 有了这个,一切都适用于默认页面演示者。

编辑:为了使用应用程序外壳中的导航,这些页面必须是Pages。因此,您可能需要重写Appshell中的导航,或者可能无法将所有页面调整为MvxPage。