防止棱镜导航上的后退导航?

问题描述 投票:0回答:2

我试图阻止用户在 prism xamarin 表单上后退导航。

我遇到了困难,因为当我收到事件时,应用程序会更改页面。

如何在棱镜导航上阻止后退导航?

xamarin prism
2个回答
0
投票

您可以在 ViewModel 中实现 IConfirmNavigationAsync 或 IConfirmNavigation 接口,这为您提供了一个返回 bool 来允许或阻止导航的方法。然后您可以使用 GetNavigationMode 来确定是否是向后导航:

非异步方法:

public class MyViewModel : BindableBase, IConfirmNavigation
{
    public bool CanNavigate(INavigationParameters parameters)
    {
        /* Prevent backward navigation */
        if (parameters.GetNavigationMode() == NavigationMode.Back) return false;

        return true;
    }
}

异步方法(例如,非常适合在返回之前显示确认弹出窗口):

public class MyViewModel : BindableBase, IConfirmNavigationAsync
{
    public async Task<bool> CanNavigateAsync(INavigationParameters parameters)
    {
        /* Confirm unsaved changes */
        if (parameters.GetNavigationMode() == NavigationMode.Back) 
        {
            var confirmed = await alertService.DisplayAlertAsync("Unsaved Changes", "You have unsaved changes do you wish to continue?");
            return confirmed;
        }

        return true;
    }
}

-1
投票

可以尝试拦截back事件。一种方法是在 ViewModel 中实现 INavigationAware 接口:

public void OnNavigatedTo(NavigationParameters parameters)
{
   if(parameters.GetNavigationMode()== NavigationMode.Back){
      //Here your code
   }
}

或者看看这个讨论:

https://forums.xamarin.com/discussion/18565/override-cancel-pop-when-hardware-back-button-pressed-using-navigatepage

© www.soinside.com 2019 - 2024. All rights reserved.