向后导航在 Windows Phone 8.1 应用程序中不起作用

Backward navigation not working in Windows Phone 8.1 App

在我的 Windows Phone 8.1 应用程序中使用 MVVM 模式,我想进行页面导航。我已经为此编写了代码。前向页面导航工作正常!

但我面临的问题是,在页面上按下后退按钮时,应用程序正在退出。

我认为问题在于我在页面导航期间每次都创建了一个新的 _frame 对象,因此 _frame 对象没有保留导航历史记录。 _frame.CanGoBack 即使经过几轮导航后也给出 false(应该是 true)。

那么我在这里缺少什么?如何保存导航历史?我的方法有什么问题吗?我将不胜感激任何帮助。

代码如下:

导航服务Class:

public class NavigationService : INavigationService
{
    private readonly Frame _frame;

    public NavigationService()
    {
        _frame = new Frame();
    }

    public void NavigateTo(Type source)
    {
        Window.Current.Content = _frame;
        _frame.Navigate(source);
    }

    public void GoBack(object sender, BackPressedEventArgs e)
    {
        Window.Current.Content = _frame;
        if (_frame.CanGoBack)
        {
            _frame.GoBack();
            e.Handled = true;
        }  
    }
}

我的XAML后面的代码:

public INavigationService NavigationService;
public EmployeeProfilePage()
{
    this.InitializeComponent();
    HardwareButtons.BackPressed += HardwareButtons_BackPressed;
    ...
}
private void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
{
    NavigationService = new NavigationService();
    NavigationService.GoBack(this, e);
}

创建Frame的新实例是错误的,只使用在App.xaml.cs

中创建的一个框架

只需将 _frame = Window.Current.Content 作为构造函数的框架,不要使用 new Frame()

您需要在当前帧上调用 GoBack,可以使用 Page 对象的 Frame 属性 访问。您的应用程序也应该只有一个 Frame,它在应用程序启动时实例化。

    ...
    HardwareButtons.BackPressed += HardwareButtons_BackPressed;
}

private void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
{
    this.Frame.GoBack();
}