通用应用程序中的MVVM Light NavigationService与导航助手

时间:2014-12-31 06:04:10

标签: c# mvvm mvvm-light win-universal-app

我想知道是否有人可以了解如何在通用应用中最好地处理导航服务,因为我对如何处理这个问题感到困惑。

如果我创建一个空白的应用程序并且只使用mvvmlight和通用应用程序教程中建议的基本NavigationService,它就不会处理Windows Phone硬件后退键,当我单击它时,它只会关闭wp8。 1个应用程序。

我发现article建议将HardwareButtons.BackPressed添加到app.cs,但我不喜欢这个想法是诚实的。也许没关系?让我知道。

基本的IHavigationService在SimpleIoc中注册,并通过构造函数注入,但如上所述,这不会处理wp8应用程序的后退键。

当我创建一个通用集线器应用程序时,它没有使用mvvmlight并且它创建了一个navigationHelper类,其中包含处理windows和wp应用程序的必要代码,但每次使用它时,声明都在相关页面后面的代码而不是ViewModel。

有关如何最好地处理此事的任何建议?

感谢。

1 个答案:

答案 0 :(得分:0)

你可以结合两全其美:

在App.xaml.cs中,您订阅了HardwareButtons.BackPressed事件:

HardwareButtons.BackPressed += HardwareButtons_BackPressed;

private void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
        {
            if(NavigationService.CanGoBack)
            {
                NavigationService.GoBack();
                e.Handled = true;
            }
        }

创建NavigationService类:

public static class NavigationService
    {
        public static Dictionary<Pages, Type> PageDictionary = new Dictionary<Pages, Type>();
        public static Frame MainFrame;
        public static void Configure(Frame frame)
        {
            PageDictionary.Add(Pages.MainPage, typeof(MainPage));
            PageDictionary.Add(Pages.Setting, typeof(SettingPage));

            MainFrame = frame;
        }

        internal static void GoBack()
        {
            if (MainFrame.CanGoBack)
                MainFrame.GoBack();
        }

        internal static bool CanGoBack
        {
            get
            {

                return MainFrame.CanGoBack;
            }
        }

        internal static void NavigateTo(Pages page, object parameter)
        {
            MainFrame.Navigate(PageDictionary[page], parameter);

        }
}

Pages是一个枚举

在App.xaml.cs中,启动rootFrame后,配置导航服务:

NavigationService.Configure(rootFrame);