我想知道是否有人可以了解如何在通用应用中最好地处理导航服务,因为我对如何处理这个问题感到困惑。
如果我创建一个空白的应用程序并且只使用mvvmlight和通用应用程序教程中建议的基本NavigationService,它就不会处理Windows Phone硬件后退键,当我单击它时,它只会关闭wp8。 1个应用程序。
我发现article建议将HardwareButtons.BackPressed添加到app.cs,但我不喜欢这个想法是诚实的。也许没关系?让我知道。
基本的IHavigationService在SimpleIoc
中注册,并通过构造函数注入,但如上所述,这不会处理wp8应用程序的后退键。
当我创建一个通用集线器应用程序时,它没有使用mvvmlight并且它创建了一个navigationHelper类,其中包含处理windows和wp应用程序的必要代码,但每次使用它时,声明都在相关页面后面的代码而不是ViewModel。
有关如何最好地处理此事的任何建议?
感谢。
答案 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);