MAUI的页面导航
实现详细页导航
先创建一个页面作为详细内容页
在AppShell的构造函数中添加如下语句以注册导航路由
public AppShell()
{
InitializeComponent();
Routing.RegisterRoute(nameof(DetailPage), typeof(DetailPage));//此处的nameof(DetailPage)也可以替换为其他名称
}
现在,我们就可以调用如下语句来导航到此页面
await Shell.Current.GoToAsync("{nameof(DetailPage)}");
在页面导航中传递参数
传递参数
在导航的URL中加上参数以传递数据,如下所示
int parameter = 1;
await Shell.Current.GoToAsync($"{nameof(DetailPage)}?parameters={parameter}");//parameters可以为任意名称
调用参数
可以通过使用 QueryPropertyAttribute
来查询导航中传递的数据
注意此处[QueryProperty(nameof(Parameters), "parameters")]
的用法,其中第一个参数(nameof(Parameters)
为要接收数据的变量名称,而第二个参数"parameters"
则为导航URL中参数的名称
[QueryProperty(nameof(Parameters), "parameters")]
public partial class DetailPage : ContentPage
{
public int parameters;
public int Parameters
{
get => parameters;
set
{
parameters = value;
MyLabel.Text = Parameters.ToString();
}
}
public DetailPage()
{
InitializeComponent();
BindingContext = this;
}
}
我们再在详细页面放一个按钮,实现多个页面反复导航(MyLabel将显示导航的次数)
<Label
x:Name="MyLabel"
VerticalOptions="Center"
HorizontalOptions="Center"/>
<Button
x:Name="NavigateBtn"
Text="Navigate"
Clicked="OnNavigateBtnClicked"
HorizontalOptions="Center" />
private async void OnNavigateBtnClicked(object sender, EventArgs e)
{
await Shell.Current.GoToAsync($"{nameof(DetailPage)}?parameters={Parameters + 1}");
}
效果如下
传递其他类型参数
Placeholder
返回
Placeholder