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

.NET MAUI视图模型中调用InsertBeforePage并传递导航参数的方法

解决方案

1. 从ReportsPage直接跳转至DetailPage并传递ReportId

在ReportsPage的逻辑层(代码后台或ViewModel)中,通过Shell导航传递参数:

// 触发跳转时传入目标ReportId
await Shell.Current.GoToAsync(nameof(DetailPage), new Dictionary<string, object>
{
    { "ReportId", targetReportId }
});

2. 在DetailPage的ViewModel中接收ReportId

通过QueryProperty特性绑定参数,实现ViewModel对ReportId的接收:

public class DetailViewModel : ObservableObject
{
    [QueryProperty(nameof(ReportId), "ReportId")]
    public int ReportId { get; set; }

    // 声明弱引用存储当前页面,避免内存泄漏
    public WeakReference<Page> CurrentPage { get; set; }

    // 执行插入导航栈的方法
    public async Task InsertSummaryPageToStack()
    {
        if (CurrentPage.TryGetTarget(out var detailPage))
        {
            // 创建带参数的SummaryPage
            var summaryPage = new SummaryPage();
            if (summaryPage.BindingContext is SummaryViewModel summaryVm)
            {
                summaryVm.ReportId = this.ReportId;
            }

            // 插入到当前页之前
            await Shell.Current.Navigation.InsertBeforePage(summaryPage, detailPage);
        }
    }
}

3. 关联DetailPage与ViewModel并触发插入操作

在DetailPage的代码后台中,将页面实例传递给ViewModel,并在页面显示时执行插入逻辑:

public DetailPage()
{
    InitializeComponent();
    var vm = new DetailViewModel();
    // 用弱引用传递当前页面
    vm.CurrentPage = new WeakReference<Page>(this);
    BindingContext = vm;
}

protected override async void OnAppearing()
{
    base.OnAppearing();
    if (BindingContext is DetailViewModel vm)
    {
        // 避免重复插入,先检查导航栈结构
        var navigationStack = Shell.Current.Navigation.NavigationStack;
        var currentIndex = navigationStack.IndexOf(this);
        if (currentIndex > 0 && navigationStack[currentIndex - 1] is not SummaryPage)
        {
            await vm.InsertSummaryPageToStack();
        }
    }
}

4. 验证效果

完成后导航栈结构为:ReportsPage => SummaryPage(带ReportId) => DetailPage。用户从DetailPage返回时会先回到SummaryPage,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 02:22:36