我试图阻止用户在 prism xamarin 表单上后退导航。
我遇到了困难,因为当我收到事件时,应用程序会更改页面。
如何在棱镜导航上阻止后退导航?
您可以在 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;
}
}
可以尝试拦截back事件。一种方法是在 ViewModel 中实现 INavigationAware 接口:
public void OnNavigatedTo(NavigationParameters parameters)
{
if(parameters.GetNavigationMode()== NavigationMode.Back){
//Here your code
}
}
或者看看这个讨论: