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

如何让AppShell的FlyoutItem导航前执行按钮点击逻辑?

解决方案

步骤1:重构MainPage的保存逻辑,抽成公共方法

把按钮点击里的保存代码单独抽离成公共方法,不用模拟按钮点击,更简洁可控:

MainPage.xaml.cs

public MainPage()
{
    InitializeComponent();
    one.Text = Preferences.Get("One", "FIRST");
}

// 抽离公共保存方法,方便外部调用
public void SaveData()
{
    one.Text = j1.Text;
    Preferences.Set("One", one.Text);
}

private void savebtnClicked(object sender, EventArgs e)
{
    SaveData(); // 按钮点击直接调用公共方法
}

步骤2:修改AppShell,拦截导航并触发保存

在AppShell后台代码中监听导航事件,当要跳转到Page2时,先执行MainPage的保存操作:

AppShell.xaml.cs

public partial class AppShell : Shell
{
    public AppShell()
    {
        InitializeComponent();
        Navigating += AppShell_Navigating;
    }

    private void AppShell_Navigating(object sender, ShellNavigatingEventArgs e)
    {
        // 判断目标是否是Page2页面
        if (e.Target.Location.OriginalString.Contains("page2"))
        {
            // 获取当前显示的MainPage实例
            if (Current.CurrentItem?.CurrentItem?.Content is MainPage mainPage)
            {
                mainPage.SaveData(); // 执行保存
            }
        }
    }
}

同时修正AppShell.xaml里的路由重复问题(两个FlyoutItem不能用同一个Route):
AppShell.xaml

<FlyoutItem Title="HOME">
    <ShellContent ContentTemplate="{DataTemplate local:MainPage}" Route="MainPage" />
</FlyoutItem>

<FlyoutItem Title="TWO">
    <ShellContent ContentTemplate="{DataTemplate local:page2}" Route="Page2" /> <!-- 修改Route为Page2 -->
</FlyoutItem>

步骤3:修改Page2,在页面显示时加载最新数据

原来Page2的构造函数只执行一次(Shell会缓存页面实例),改成每次页面显示时读取最新数据:

page2.xaml.cs

public page2()
{
    InitializeComponent();
}

protected override void OnAppearing()
{
    base.OnAppearing();
    // 每次进入页面都获取最新的Preferences数据
    tone.Text = Preferences.Get("One", "FIRST");
}

问题根源说明

  1. 原FlyoutItem导航直接跳转,未触发MainPage的保存逻辑,导致数据没更新到Preferences
  2. Page2构造函数仅在首次加载时执行,后续进入页面不会重新读取数据
  3. AppShell中重复的Route会导致导航逻辑混乱

修改后,点击「TWO」的FlyoutItem时会先自动保存MainPage的数据,再跳转到Page2,且Page2每次显示都会读取最新数据,解决了重启才能看到更新的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 19:13:16