Caliburn Micro 2和WinPhone 8.1:后退按钮没有绑定?

时间:2014-05-16 17:20:32

标签: c# windows-phone-8 caliburn.micro

我正在使用 Caliburn Micro 2 beta 2 创建WinPhone 8.1应用。该应用程序工作正常,但我在导航中的后退按钮有问题:导航到另一个视图工作,但如果我按下模拟器上的硬件后退按钮,一旦我导航后返回到上一页,我& #39; m回到OS开始屏幕,好像导航堆栈是空的。在所有代码示例中,我都可以发现它在我的VM上实现GoBack方法足以通过约定将其绑定到导航系统,所以我似乎没有遗漏任何东西。如果我在GoBack方法上设置一个断点,但它根本没有被击中,这表明问题应该与绑定相关联。

这是一个完整的repro空解决方案:http://1drv.ms/1gLAVil。这个应用程序是一种具有2个视图的CM骨架,因此您可以从一个视图导航到另一个视图然后再按下。

除了通常的CM管道(在App.xaml.cs中找到)之外,我的相关代码只是:

``` public bool CanGoBack {     得到{return _navigation.CanGoBack; } }

public void GoBack() {     _navigation.GoBack(); } ```

其中_navigation是在我的所有视图模型的基类的构造函数中注入的INavigationService的标准实现。我尝试了两种我知道的导航方法,但是(正如预期的那样)没有任何变化:方法NavigateToViewModel<OtherViewModel>()(它有一个重载接收一个对象参数,其类型应该与目标VM的属性类型相匹配)名为Parameter,这是在视图模型之间传递复杂对象的快捷方式)和UriFor<OtherViewModel>().Navigate()(使用.WithParam之前通过Navigate()指定的可选,简单可序列化参数构建类似URI的字符串{{1}} 1}})。

有人可以提出解决方案吗?

1 个答案:

答案 0 :(得分:0)

如果您想返回单击后退按钮,则需要覆盖硬件按钮事件:

HardwareButtons.BackPressed += HardwareButtons_BackPressed;

void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
        {
            Frame rootFrame = Window.Current.Content as Frame;
            if(rootFrame != null && rootFrame.CanGoBack)
            {
                rootFrame.GoBack();
                e.Handled = true;
            }

        }

确保将e.Handled设置为true。