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

.NET MAUI页面间数据传递:从LoginPage向MainPage回传数据

解决方案:基于代码隐藏的页面数据回传(无需额外NuGet)

步骤1:修正LoginPage代码

完善LoginPage逻辑,确保输入的姓名能被正确存储并在返回前完成赋值:

// 修正属性命名,符合C#规范
public string Name { get; set; }

private void btnRegister_Clicked(object sender, EventArgs e)
{
    if (!ValidateName()) return;

    // 验证通过后,把输入框内容赋值给Name属性
    Name = txtRegistro.Text.Trim();
    Navigation.PopAsync();
}

private bool ValidateName()
{
    return !string.IsNullOrWhiteSpace(txtRegistro.Text);
}

步骤2:修改MainPage代码

在MainPage中等待LoginPage返回后,直接获取其Name属性值并更新界面:

string greetings = "";

async private void LogintBtn_Clicked(object sender, EventArgs e)
{
    // 创建LoginPage实例并导航,等待页面返回
    var loginPage = new LoginPage();
    await Navigation.PushAsync(loginPage);

    // 页面返回后,读取LoginPage的Name值并更新UI
    if (!string.IsNullOrWhiteSpace(loginPage.Name))
    {
        greetings = $"Hello {loginPage.Name}, and welcome!";
        Greetinglbl.Text = greetings;
    }
}

之前代码失效的原因

  • MainPage里PushAsync后立刻执行设置greetings的代码,此时LoginPage还未返回,Name变量始终是空值,界面自然不会更新。
  • 你尝试的Shell.GoToAsync传参是向前传参(从Main到Login),而需求是向后回传(从Login到Main),所以不适用当前场景。

可选方案:事件驱动(松散耦合)

如果需要更灵活的耦合方式,可以用事件实现:

LoginPage代码修改:

// 定义事件,完成输入后触发
public event EventHandler<string> NameSubmitted;

private void btnRegister_Clicked(object sender, EventArgs e)
{
    if (!ValidateName()) return;

    var inputName = txtRegistro.Text.Trim();
    // 触发事件传递姓名
    NameSubmitted?.Invoke(this, inputName);
    Navigation.PopAsync();
}

private bool ValidateName()
{
    return !string.IsNullOrWhiteSpace(txtRegistro.Text);
}

MainPage代码修改:

string greetings = "";

async private void LogintBtn_Clicked(object sender, EventArgs e)
{
    var loginPage = new LoginPage();
    // 订阅事件
    loginPage.NameSubmitted += LoginPage_NameSubmitted;
    await Navigation.PushAsync(loginPage);
}

private void LoginPage_NameSubmitted(object sender, string name)
{
    greetings = $"Hello {name}, and welcome!";
    Greetinglbl.Text = greetings;
    // 取消订阅避免内存泄漏
    ((LoginPage)sender).NameSubmitted -= LoginPage_NameSubmitted;
}

两种方案均基于.NET MAUI原生API实现,无需额外安装NuGet包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:15:20