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

Xamarin中无需重载Page1如何获取其他页面Preferences值更新Label

解决方案

这里提供3种无需重载Page1即可实时更新Label的实现方式,你可以根据自己的项目习惯选择:

方案1:监听弹窗关闭事件(改量最少,最适配当前场景)

你使用的Rg.Plugins.Popup的PushAsync方法是异步Task,弹窗完全关闭后才会执行后续代码,直接在弹窗关闭后读取最新的Preferences赋值即可:
修改Page1.xaml.cs的one_Clicked方法:

private async void one_Clicked(object sender, EventArgs e)
{
   // 加await等待弹窗关闭
   await PopupNavigation.Instance.PushAsync(new Popup());
   // 弹窗关闭后直接读取最新值更新Label
   getPreferences.Text = Preferences.Get("PreOne", "defaultpre");
}

方案2:委托回调(无全局依赖,耦合度低)

给Popup页加回调委托,Preferences更新后主动通知Page1更新:

  1. 首先修改Popup.xaml.cs,新增回调属性并在点击事件中触发:
// 新增公共回调属性
public Action<string> OnPreferenceUpdated { get; set; }

private void ss_Tapped(object sender, EventArgs e)
{
   string setone = "01";
   Preferences.Set("PreOne", setone);
   // 触发回调,把更新后的值传给调用方
   OnPreferenceUpdated?.Invoke(setone);
   // 可选:点击后关闭弹窗
   PopupNavigation.Instance.PopAsync();
}
  1. 修改Page1.xaml.cs的one_Clicked方法,绑定回调处理逻辑:
private async void one_Clicked(object sender, EventArgs e)
{
   var popup = new Popup();
   // 绑定回调,收到更新后直接修改Label
   popup.OnPreferenceUpdated += (newValue) => 
   {
       getPreferences.Text = newValue;
   };
   await PopupNavigation.Instance.PushAsync(popup);
}

方案3:MessagingCenter消息订阅(适合多页面广播场景)

用Xamarin/MAUI自带的消息中心做跨页面通知:

  1. 修改Popup.xaml.cs的点击事件,更新完Preferences后发送通知:
private void ss_Tapped(object sender, EventArgs e)
{
   string setone = "01";
   Preferences.Set("PreOne", setone);
   // 发送更新消息
   MessagingCenter.Send(this, "PreOneValueChanged", setone);
   PopupNavigation.Instance.PopAsync();
}
  1. 修改Page1.xaml.cs,在构造函数中订阅消息,页面销毁时取消订阅避免内存泄漏:
public Page1()
{
    InitializeComponent();
    string getpre = Preferences.Get("PreOne", "defaultpre");
    getPreferences.Text = getpre;
    // 订阅更新消息
    MessagingCenter.Subscribe<Popup, string>(this, "PreOneValueChanged", (sender, newValue) =>
    {
        getPreferences.Text = newValue;
    });
}

protected override void OnDisappearing()
{
    base.OnDisappearing();
    // 离开页面时取消订阅
    MessagingCenter.Unsubscribe<Popup, string>(this, "PreOneValueChanged");
}

内容的提问来源于stack exchange,提问作者Chim Di Tru

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:09:02