Xamarin晶型5:Shell.Current.GoToAsync(route)正在从一个页面向后导航...我不知道为什么

xxls0lw8  于 2023-01-15  发布在  Shell
关注(0)|答案(1)|浏览(202)

我希望有人能帮助我。我正在开发一个Xamarin Forms 5应用程序使用 shell 。该应用程序已经完成了90%,并一直完美地工作。
我现在遇到了一个特定视图的问题。在一个视图上,我调用了Shell.Current.GoToAsync(route),但应用程序没有导航到指定的路线,而是返回(弹出)。
我100%确定所有路线都已正确注册,并且我在导航时指定了正确的路线。
有人见过这种行为吗?我完全被难住了。
这是正在使用的导航服务功能:

public async Task PopAsync()
    {
        await Shell.Current.Navigation.PopAsync();
    }
    
    public async Task GoBackAsync()
    {
        await Shell.Current.GoToAsync("..");
    }

    public async Task ReplaceCurrent<TViewModel>(string parameters = null) where TViewModel : BaseViewModel
    {
        await GoToAsync<TViewModel>(@"../", parameters);
    }

    public async Task PushAsync<TViewModel>(string parameters = null) where TViewModel : BaseViewModel
    {
        await GoToAsync<TViewModel>("", parameters);
    }

    private async Task GoToAsync<TViewModel>(string routePrefix, string parameters) where TViewModel : BaseViewModel
    {
        var route = routePrefix + typeof(TViewModel).Name;
        if (!string.IsNullOrWhiteSpace(parameters))
        {
            route += $"?{parameters}";
        }
        await Shell.Current.GoToAsync(route);
    }

传递的路由值是“设备检查编辑视图模型”。
这些路线登记如下:

Routing.RegisterRoute(nameof(WorkOrderViewModel), typeof(WorkOrderView));
  
Routing.RegisterRoute(nameof(InspectionListViewModel), typeof(InspectionListView));

Routing.RegisterRoute(nameof(DeviceInspectionViewModel), typeof(DeviceInspectionView));

Routing.RegisterRoute(nameof(DeviceInspectionEditViewModel), typeof(DeviceInspectionEditView));

调用GoToAsync时,NavigationStack如下所示:

  • [0] - {第页}空
  • [1] -工作单视图
  • [2] -检查列表视图
  • [3] -设备检查视图

这是我们使用的代码:

private async Task Edit(CertDevice dev)
    {
        var sw = Logger.LogEntry();
        await _navigationService.PushAsync<DeviceInspectionEditViewModel>();
        Logger.LogExit(sw);

    }

重要说明

我在调试日志中看到**“用户按下硬件返回按钮”**。

uemypmqf

uemypmqf1#

视图的子类试图通过捕获OnNavigating来处理硬件后退按钮按下。这是用户错误。

相关问题