You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET MAUI中GoToAsync触发ArgumentOutOfRangeException问题求助

.NET MAUI Shell导航触发ArgumentOutOfRangeException的排查与解决

可能的原因及对应解决方案

1. 同步RelayCommand调用异步方法未正确等待

你页面A中绑定按钮的是[RelayCommand](同步命令),但在命令方法里调用异步的GoToInfoPage时未做等待,这会导致异步操作脱离UI上下文,进而引发Shell导航异常。

解决方法:
把页面A中的同步RelayCommand替换为MVVM Community Toolkit的[AsyncRelayCommand],并在命令方法中await导航逻辑:

[AsyncRelayCommand]
async Task YourButtonCommand()
{
    // 执行计算逻辑
    await GoToInfoPage();
}

2. 路由或DI注册的潜在问题

虽然你的路由注册代码看起来没问题,但可以验证以下细节:

  • 确认nameof(InfoPage)返回的字符串和路由注册名称完全一致(nameof一般不会出错,但需排除命名空间导致的隐性差异)。
  • 检查DI容器是否能正确解析InfoPage和InfoPageViewModel:可以在MainPage中手动获取InfoPage实例,验证是否能正常创建,排除DI注册故障。

3. Shell导航上下文异常

虽然概率较低,但如果Shell未完全初始化就触发导航,也可能抛出该异常。可以在导航前增加空值检查:

async Task GoToInfoPage()
{
    if (Shell.Current is null) return;
    await Shell.Current.GoToAsync(nameof(InfoPage));
}

额外验证步骤

  • 暂时注释掉InfoPage XAML中的x:DataType属性,排除绑定上下文加载顺序导致的间接异常。
  • 尝试改用模态导航验证页面本身是否正常:
await Shell.Current.Navigation.PushModalAsync(new InfoPage(ViewModelLocator.GetService<InfoPageViewModel>()));

如果能正常跳转,说明问题出在Shell路由系统而非页面本身。

内容的提问来源于stack exchange,提问作者SubwayToVenus22

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 19:34:59