在使用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);
}
答案 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();
}