我希望有人能帮助我。我正在开发一个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);
}
重要说明
我在调试日志中看到**“用户按下硬件返回按钮”**。
1条答案
按热度按时间uemypmqf1#
视图的子类试图通过捕获OnNavigating来处理硬件后退按钮按下。这是用户错误。