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

如何在page2.xaml.cs中获取page1.xaml.cs的公共变量(不使用Frame.Navigate)

几种跨页面获取Page1变量的可行方案

既然你没法用Frame.Navigate传递参数,还需要随时拿到Page1里的var1值,这里有几个实用的实现方式,你可以根据项目情况挑合适的:

1. 单例模式(快速直接的方案)

如果你的Page1在应用生命周期里只会实例化一次,改成单例模式是最省事的,Page2能直接拿到它的实例访问var1。

修改Page1.xaml.cs:

public partial class Page1 : Page
{
    // 定义单例实例
    private static Page1 _instance;
    public static Page1 Instance => _instance ?? (_instance = new Page1());

    public string var1 = "hello world";

    private Page1()
    {
        InitializeComponent();
    }
}

然后在Page2.xaml.cs的按钮点击事件里调用:

private void Button_Click(object sender, RoutedEventArgs e)
{
    string value = Page1.Instance.var1;
    // 这里就成功获取到var1的值了
}

注意:如果Page1会被多次实例化,单例模式就不适用了,得换下面的方法。

2. 借助Application类共享数据

WPF/UWP的Application是全局类,你可以把需要共享的变量放到它的属性里,或者用它的Resources字典存储。

比如在App.xaml.cs里加一个属性:

public string SharedVar1 { get; set; }

然后在Page1里初始化或同步更新这个值:

public Page1()
{
    InitializeComponent();
    ((App)Application.Current).SharedVar1 = var1;
    // 如果var1会动态变化,记得在变化时同步更新这个属性
}

在Page2的按钮点击事件里获取:

private void Button_Click(object sender, RoutedEventArgs e)
{
    string value = ((App)Application.Current).SharedVar1;
}

3. 事件通知+实例传递(适合动态变化场景)

如果var1是会动态改变的,你希望Page2能实时感知到变化,可以用事件机制,配合实例传递来实现。

首先在Page1里定义事件并改造var1为属性:

public event Action<string> Var1Changed;

private string _var1 = "hello world";
public string var1
{
    get => _var1;
    set
    {
        _var1 = value;
        Var1Changed?.Invoke(value); // 值变化时触发事件
    }
}

然后在Page2里,先拿到Page1的实例(比如通过Application属性保存,或者导航时传递),再订阅事件:

private Page1 _page1Instance;

// 假设通过构造函数传入Page1实例
public Page2(Page1 page1)
{
    InitializeComponent();
    _page1Instance = page1;
    _page1Instance.Var1Changed += OnVar1Changed;
}

// 响应var1变化的方法
private void OnVar1Changed(string newValue)
{
    // 这里能拿到最新的var1值
}

// 按钮点击时获取当前值
private void Button_Click(object sender, RoutedEventArgs e)
{
    string currentValue = _page1Instance.var1;
}

这种方式适合需要实时响应变量变化的场景,比单纯取值更灵活。

4. 静态类存储共享数据

创建一个静态类来存放跨页面共享的变量,所有页面都能直接访问:

public static class AppData
{
    public static string Var1 { get; set; } = "hello world";
}

在Page1里同步更新这个值:

// 可以直接把原来的var1替换成AppData.Var1,或者在需要时同步
AppData.Var1 = var1;

在Page2的按钮点击事件里获取:

private void Button_Click(object sender, RoutedEventArgs e)
{
    string value = AppData.Var1;
}

这个方法最简单,但要注意静态变量的生命周期,避免内存泄漏,适合存储全局通用的简单数据。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:37:17