我正在使用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
。每个页面都有一个覆盖pf 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
方法中所看到的那样,我试图将其弄清楚,但没有一种是运作方式。每次我按下后退按钮应用程序崩溃没有任何错误。
答案 0 :(得分:0)
我不认为该应用程序崩溃,它只是退出,因为这是后退按钮的默认行为。
您需要做的是通过在BackPressed事件处理程序中添加以下代码行来标记您已经处理了后退按钮:
<a href="#main-image" class="scrollToTop"><img src="img/up-arrow.png" class="up-arrow"/></a>