当通过后退按钮从页面导航时,应用程序崩溃

本文关键字:导航 崩溃 应用程序 按钮 | 更新日期: 2023-09-27 18:13:04

我正在使用MVVM开发Windows Phone 8.1应用程序。

我有基视图模型类,其中包含导航服务如下:

 public abstract class BaseViewModel : INotifyPropertyChanged
    {
        protected readonly INavigationService NavigationService;
        //....
    }
这是我的导航服务类:
  public class NavigationService : INavigationService
    {
        public void Navigate(Type destinationPage)
        {
            ((Frame)Window.Current.Content).Navigate(destinationPage);
        }
        public void Navigate(Type desitnationPage, object parameter)
        {
            ((Frame)Window.Current.Content).Navigate(desitnationPage, parameter);
        }
        public void GoBack()
        {
            ((Frame)Window.Current.Content).GoBack();
        }
    }

当我从XAML绑定命令时,一切都很好。当我想覆盖BackButton时有问题。我还创建了基页模型,其中也包含NavigationService。每个页面都有BackPressed的覆盖,如下所示:

public class BasePage : Page
    {
        protected INavigationService NavigationService => ComponentManager.GetInstance<INavigationService>();
        public BasePage()
        {
            //...
        }
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            HardwareButtons.BackPressed += HardwareButtons_BackPressed;
        }
       protected virtual void HardwareButtons_BackPressed(object sender,    BackPressedEventArgs e)
        {
            //Frame.Navigate(typeof(MainPage));
            (this.DataContext as BaseViewModel)?.Back.Execute(sender);
        }
}

正如你在HardwareButtons_BackPressed方法中看到的,我试图使它以各种方式,但没有一种是有效的。

当通过后退按钮从页面导航时,应用程序崩溃

我不认为应用程序正在崩溃,它只是退出,因为这是后退按钮的默认行为。

你需要做的是通过在你的BackPressed事件处理程序中添加这行代码来标记你已经处理了后退按钮:

e.Handled = true;