向后导航无法在Windows Phone 8.1应用程序中工作

时间:2015-03-18 18:19:33

标签: c# xaml mvvm windows-phone-8.1

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

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

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

那我在这里错过了什么?如何保存导航历史记录?我的方法有什么问题吗?我将不胜感激。

代码如下:

NavigationService类:

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

2 个答案:

答案 0 :(得分:1)

创建一个新的Frame实例是错误的,只需使用App.xaml.cs中创建的一个框架

只需将_frame = Window.Current.Content作为Frame放到构造函数中,永远不要使用新的Frame()

答案 1 :(得分:0)

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

    ...
    HardwareButtons.BackPressed += HardwareButtons_BackPressed;
}

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