我正在使用MvvmCross构建Windows Phone应用程序(使用WinRT 8.1)。要使用ShowViewModel()导航到新视图。但当我点击手机上的后退按钮时,应用程序正在关闭,而不是导航回第一个视图。我怎么做呢当我按下后退按钮时我想返回第一个视图?
答案 0 :(得分:4)
我解决了它在我的viewmodel中使用带有后退按钮事件的接口,然后我写了一个客户端特定的实现。在viewmodel中,我处理事件并在我的基类MvxViewModel中调用close方法。在我的博客上了解有关我的解决方案的更多信息,http://danielhindrikes.se/windows-phone/handle-windows-phone-back-button-pressed-when-using-mvvm/
答案 1 :(得分:3)
这是一个更简单的解决方案。为从MvxWindowsPage派生的所有WP页面创建基本类型。然后,在那里处理后退密钥并将适当的信息路由到您的VM:
public abstract class MyBaseView : MvxWindowsPage {
public MyBaseView() {
this.InitializeComponent();
HardwareButtons.BackPressed += HardwareButtons_BackPressed;
}
void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e) {
if (Frame.CanGoBack) {
var vm = ViewModel as MyBaseViewModel;
if (vm != null) {
e.Handled = true;
vm.GoBackCommand.Execute(null);
}
}
}
}
现在,您还必须确保拥有一个基本视图模型,该视图模型派生自MvxViewModel,并从中派生所有VM。该基本VM应具有GoBackCommand observable属性,并且执行该命令应该执行简单的Close(this)。
要了解幕后发生的事情,请参阅此相关问题:Windows Phone 8.1 Universal App terminates on navigating back from second page?
EDIT 固定声明。