【问题标题】:How to intercept Navigation Bar Back Button Clicked Prism Xamarin Forms?如何拦截导航栏后退按钮单击的 Prism Xamarin 表单?
【发布时间】:2017-08-23 12:33:00
【问题描述】:

基本上这是来自Here 的相同问题,但该解决方案不适用于Prism MVVM,因为MainActivity 中的OnOptionsItemSelected(IMenuItem item) 从未被提出。 对于我在该页面上使用的硬件按钮:

protected override bool OnBackButtonPressed()
{
    return !PageUtilities.CanNavigate(this, null);
}

【问题讨论】:

标签: c# xamarin mvvm xamarin.forms prism


【解决方案1】:

你可以这样做

protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
   e.Cancel = !PageUtilities.CanNavigate(this, null);
   base.OnBackKeyPress(e);
}

当导航需要停止时取消事件

【讨论】:

  • 基类没有'OnBackPress'可以覆盖你在哪里找到的?
  • 您可以使用 NavigationPage public class MyNavigationPage : NavigationPage { public override void OnBackPressed() { if(App.Instance.DoBack) { base.OnBackPressed(); } } public bool DoBack { get { NavigationPage mainPage = MainPage as NavigationPage; if (mainPage != null) { return mainPage.Navigation.NavigationStack.Count > 1; } 返回真; } } }
  • 问题是 OnBackButtonPressed 仅在按下硬件按钮时才被执行 - 这是一个 xamarin 问题 - 这就是为什么我链接了讨论此问题的堆栈溢出线程并在寻找解决方案时使用棱镜
【解决方案2】:

我想对此没有直接或单一的答案。 根据您的要求,您必须需要提供 MVVM 实现。

最新的 Prism 库更新具有 OnNavigatedFrom 方法(您需要通过实现 INavigationAware 接口来覆盖)

    public virtual void OnNavigatedFrom(NavigationParameters parameters)
    {
     // here is the place you would require to handle the Back button event, 
     // this is fired every-time, user tries to leave the view. 
    }

    public virtual void OnNavigatedTo(NavigationParameters parameters)
    {
     // fired upon view load
    }

您可能需要一个静态(布尔值或其他)变量来检查用户是否正在离开视图,并可选择显示消息或使操作无效。

希望这会有所帮助。

问候,

N 鲍阿

【讨论】:

  • 一旦页面从堆栈中弹出,OnNavigatedFrom 就会被执行
  • 您的问题并没有明确说明您到目前为止所做的事情,我的回答是基于 for Prism MVVM 指南。打开并发布更多关于你到目前为止所做的事情的信息,然后任何人都可以帮助你。
【解决方案3】:
猜你喜欢
  • 2015-10-20
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 2018-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多