Windows Phone应用程序中的MvvmCross和后退按钮

时间:2014-09-04 10:20:43

标签: windows-phone mvvmcross

我正在使用MvvmCross构建Windows Phone应用程序(使用WinRT 8.1)。要使用ShowViewModel()导航到新视图。但当我点击手机上的后退按钮时,应用程序正在关闭,而不是导航回第一个视图。我怎么做呢当我按下后退按钮时我想返回第一个视图?

2 个答案:

答案 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 固定声明。