【问题标题】:MvvmCross and back button in Windows Phone appWindows Phone 应用程序中的 MvvmCross 和返回按钮
【发布时间】:2014-09-04 10:20:43
【问题描述】:

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

【问题讨论】:

标签: windows-phone mvvmcross


【解决方案1】:

我解决了它在我的视图模型中使用带有后退按钮事件的接口,然后我编写了一个客户端特定的实现。在视图模型中,我处理事件并在我的基类 MvxViewModel 中调用 close 方法。在我的博客http://danielhindrikes.se/windows-phone/handle-windows-phone-back-button-pressed-when-using-mvvm/

上阅读有关我的解决方案的更多信息

【讨论】:

    【解决方案2】:

    这是一个更简单的解决方案。为从 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 派生的基础视图模型,并且您可以从该基础视图模型派生所有虚拟机。该基础虚拟机应该有一个 GoBackCommand 可观察属性,并且执行该命令应该执行一个简单的 Close(this)。

    要了解幕后情况,请参阅以下相关问题:Windows Phone 8.1 Universal App terminates on navigating back from second page?

    编辑 固定声明。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多