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

.NET Maui从模态页返回时如何在原页面触发代码?

解决.NET MAUI模态页返回后执行代码的问题

针对你通过await Navigation.PushModalAsync(new PageB());从页面A打开模态页B,返回后需要在页面A执行指定代码的需求,以下是几种可靠的实现方案:

方法1:利用PushModalAsync的Task完成回调

PushModalAsync返回的Task会在模态页关闭时自动完成,只需在await语句后直接编写要执行的代码即可,这是最直接的实现方式:

// 页面A的导航逻辑中
await Navigation.PushModalAsync(new PageB());
// 模态页关闭后,此处代码会自动执行
YourTargetMethod(); // 替换为你需要执行的指定代码

方法2:重写页面A的OnAppearing生命周期方法

当模态页关闭回到页面A时,页面A的OnAppearing方法会被触发。如果需要区分首次加载和模态返回的场景,可以通过标记变量实现:

// 页面A的代码中
private bool _isFirstLoad = true;

protected override void OnAppearing()
{
    base.OnAppearing();
    if (!_isFirstLoad)
    {
        // 此处编写模态返回后要执行的代码
        YourTargetMethod();
    }
    _isFirstLoad = false;
}

方法3:弱引用消息传递(低耦合场景)

如果页面A和B需要保持低耦合,可使用MAUI内置的WeakReferenceMessenger实现跨页面通信:

  1. 在页面A中注册消息监听:
// 页面A的构造函数或OnAppearing方法中注册
WeakReferenceMessenger.Default.Register<ModalReturnMessage>(this, (sender, message) =>
{
    // 收到消息后执行指定代码
    YourTargetMethod();
});

// 定义消息类(可放在项目公共类文件中)
public class ModalReturnMessage { }
  1. 在页面B关闭时发送消息:
// 页面B的返回逻辑中(例如返回按钮点击事件)
WeakReferenceMessenger.Default.Send(new ModalReturnMessage());
await Navigation.PopModalAsync();

注意:为避免内存泄漏,需在页面A的OnDisappearing方法中注销监听:

protected override void OnDisappearing()
{
    base.OnDisappearing();
    WeakReferenceMessenger.Default.Unregister<ModalReturnMessage>(this);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 16:07:11