繁体   English   中英

覆盖Prism for Windows Phone 8.1运行时中的“后退”按钮

[英]Overriding the Back Button in Prism for Windows Phone 8.1 Runtime

我在Windows Phone 8.1项目中将Prism MVVM库用于WinRT。 是否可以通过手机的后退按钮防止后退导航并在ViewModel中处理后退按钮的按下操作?

具体方案:

  • 用户可以从项目列表中选择一个项目(“活动”项目),例如游戏中的玩家。 该项目是应用程序其余功能(例如数据库查询)的参考。
  • 选择一项将使用户返回到上一页(主页)。
  • 在同一列表中,用户还可以删除不再需要的项目。 应该可以删除所有项目。

问题:如果用户删除活动项目或最后一个项目,然后点击“后退”按钮,那么我最终将拥有无效的活动项目。

为避免这种情况,我想取消后退按钮导航,并提示用户选择或创建另一个活动项,最好是从ViewModel中选择。


更新:现在,根据我对Nate的评论的理解,我现在向App.xaml.cs添加了一个事件处理程序。 这应该覆盖整个应用程序:

private void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
{
    Frame currentFrame = Window.Current.Content as Frame;
    if (currentFrame == null)
    {
        return;
    }
    if (currentFrame.Content is SelectionPage)
    {
        e.Handled = true;
    }
    else if (currentFrame.CanGoBack)
    {
        currentFrame.GoBack();
        e.Handled = true;
    }
}

并在构造函数中订阅该事件:

#if WINDOWS_PHONE_APP
        HardwareButtons.BackPressed += HardwareButtons_BackPressed;
#endif

这似乎可以很好地处理后退按钮的按下,但不会停止现有的导航。 因此无论如何它都会返回,默认情况下会返回两次。

这个有可能。 这是解决方案(主要受此讨论启发):

创建一个允许视图模型禁用向后导航的接口:

public interface IRevertState
{
    bool CanRevertState();
    void RevertState();
}

在视图模型中实现接口:

public class myViewModel : ViewModel, IRevertState {
public bool CanRevertState() {
    return (...) //condition under which back navigation should be disabled
}
public void RevertState() {
    (...) // optionally reset condition if required
}

在App.Xaml.cs中处理向后导航:

#if WINDOWS_PHONE_APP
    protected override void OnHardwareButtonsBackPressed(object sender, BackPressedEventArgs e) {
        var page = (Page)((Frame)Window.Current.Content).Content;
        if (page.DataContext is IRevertState) {
            var revertable = (IRevertState)page.DataContext;
            if (revertable.CanRevertState()) {
                revertable.RevertState();
                e.Handled = true;
                return;
            }
        }
        base.OnHardwareButtonsBackPressed(sender, e);
    }
#endif

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM