gpt4 book ai didi

c# - 通用应用程序中的 MMVM Light NavigationService 与 NavigationHelper

转载 作者:太空宇宙 更新时间:2023-11-03 15:47:05 25 4
gpt4 key购买 nike

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

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

我找到了一个 article建议将 HardwareButtons.BackPressed 添加到 app.cs,但老实说我不喜欢这个想法。也许没事?让我知道。

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

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

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

谢谢。

最佳答案

您可以结合两全其美:

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

关于c# - 通用应用程序中的 MMVM Light NavigationService 与 NavigationHelper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27716876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com