0

0

MAUI怎么传递参数到新页面 MAUI导航传参步骤

幻夢星雲

幻夢星雲

发布时间:2025-12-27 13:21:19

|

931人浏览过

|

来源于php中文网

原创

MAUI中传递参数到新页面推荐使用Shell路由配合QueryProperty特性,需在目标页属性标注[QueryProperty]、AppShell注册带占位符路由、调用GoToAsync传参;非Shell项目可用构造函数或公共属性传简单参数;复杂对象应仅传ID并通过服务查询。

maui怎么传递参数到新页面 maui导航传参步骤

MAUI 里传递参数到新页面,核心是用 ShellNavigationPage 的导航机制配合路由参数(Route Parameters)或查询字符串(Query Attributes),不推荐直接传对象引用。

使用 Shell 路由 + QueryProperty 传参(推荐)

这是 MAUI 官方推荐、类型安全、支持深度链接的方式。关键三步:

  • 在目标页面(如 DetailPage.xaml.cs)上,给需要接收的属性加上 [QueryProperty] 特性,并确保属性有 public set 访问器
  • 在 AppShell 中注册带参数占位符的路由,例如:
    Routing.RegisterRoute("detail/{id}", typeof(DetailPage));
  • 跳转时用 Shell.Current.GoToAsync("detail/123") 或带查询参数:
    Shell.Current.GoToAsync("detail/123?title=Hello&category=News");

对应页面示例:

[QueryProperty(nameof(ItemId), "id")]
[QueryProperty(nameof(Title), "title")]
public partial class DetailPage : ContentPage
{
    public string ItemId { get; set; }
    public string Title { get; set; }
    // 属性被赋值后,OnAppearing 或构造函数后自动触发(注意:构造函数中还拿不到)
}

用 Navigation.PushAsync 传简单参数(适合非 Shell 项目)

如果没用 Shell,而是基于 NavigationPage,可手动在跳转前设置参数:

  • 新建页面实例时,通过构造函数传参(最直接):
    var page = new DetailPage("123", "Hello");
    await Navigation.PushAsync(page);
  • 或定义公共属性,在 Push 前赋值:
    var page = new DetailPage();
    page.ItemId = "123";
    page.Title = "Hello";
    await Navigation.PushAsync(page);

⚠️ 注意:这种方式不支持 URI 导航和热重载调试,适合小型或原型项目。

薏米AI
薏米AI

YMI.AI-快捷、高效的人工智能创作平台

下载

传复杂对象?别直接传,改用服务或 ID 查找

MAUI 不支持跨页面序列化传递自定义对象(尤其含事件、BindingContext 等)。正确做法是:

  • 只传唯一标识(如 int id 或 string key)
  • 在目标页通过 IEnumerable 或注入的数据服务(如 IDataService)按 ID 查询真实数据
  • 或使用 WeakReferenceMessenger 发送消息(适合解耦但非导航主流程)

接收参数后的处理时机

[QueryProperty] 时,属性会在页面初始化后期被自动赋值,但不是在构造函数里。建议:

  • OnAppearing() 中使用参数加载数据(最常用)
  • 或监听属性 setter,触发刷新逻辑(需手动实现 INotifyPropertyChanged)
  • 避免在构造函数里依赖这些参数——它们此时还是默认值

基本上就这些。关键是选对方式:Shell 项目优先走 Route + QueryProperty;简单跳转用构造函数;复杂数据靠 ID + 服务查。不复杂但容易忽略细节。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

311

2023.08.02

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

246

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

204

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1428

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

606

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

546

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

539

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

157

2025.07.29

ip地址修改教程大全
ip地址修改教程大全

本专题整合了ip地址修改教程大全,阅读下面的文章自行寻找合适的解决教程。

27

2025.12.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 教程
Go 教程

共32课时 | 3万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号