MAUI中使用Shell导航传递导航属性失败,如何排查解决?
MAUI Shell导航QueryProperty为空问题解决
核心问题:页面构造函数名称不匹配
你的ItemPage类的构造函数被错误命名为TablePartyPage(),与类名不一致。MAUI框架要求页面构造函数必须与类名完全一致,否则无法正确实例化页面,导致导航系统无法为QueryProperty标记的Id属性赋值。
修复步骤
- 修正构造函数名称
将构造函数名改为与类名一致的ItemPage():
public ItemPage() { InitializeComponent(); }
- 优化属性赋值逻辑(可选)
MAUI Shell的QueryProperty赋值在构造函数执行后、OnAppearing调用前完成。若需确保属性赋值后立即处理逻辑,可给Id属性添加setter监听:
private string _id; public string Id { get => _id; set { _id = value; if (!string.IsNullOrEmpty(_id)) { string parsedId = TablePartyId.FromUrlQueryValue(_id); BindingContext = new ItemViewModel(...); } } }
此方式可替代OnAppearing中的逻辑,避免依赖属性赋值时机的不确定性。
- 确认路由注册有效性
确保AppShell.xaml或代码中的路由注册与跳转路径匹配,例如XAML注册:
<ShellContent Route="ItemPage" ContentTemplate="{DataTemplate local:ItemPage}" />
或代码注册:
Routing.RegisterRoute(nameof(ItemPage), typeof(ItemPage));
额外排查点
- 验证跳转路由中的参数键名(
Id)与QueryProperty的第二个参数完全一致(你的代码中已符合要求)。 - 禁止在构造函数中访问
QueryProperty属性,此时属性尚未被导航系统赋值。
内容的提问来源于stack exchange,提问作者balintn
相关产品推荐
相关产品推荐

