【问题标题】:MMVM Light NavigationService vs NavigationHelper in Universal App通用应用程序中的 MMVM Light NavigationService 与 NavigationHelper
【发布时间】:2015-02-27 07:01:15
【问题描述】:

我想知道是否有人可以阐明如何最好地处理通用应用程序中的导航服务,因为我对如何处理感到困惑。

如果我创建一个空白应用程序并按照 mvvmlight 和通用应用程序教程中的建议使用基本 NavigationService,它不会处理 windows phone 硬件返回键,当我单击它时,它只会关闭 wp8.1 应用程序.

我发现一个article 建议将 HardwareButtons.BackPressed 添加到 app.cs,但老实说我不喜欢这个想法。也许没关系?告诉我。

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

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

关于如何最好地处理这个问题有什么建议吗?

谢谢。

【问题讨论】:

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


    【解决方案1】:

    您可以结合两全其美:

    在 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-21
      • 1970-01-01
      相关资源
      最近更新 更多