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

C#页面间数据传递:如何将Scenario2_Client的值传给Scenario3_Exercise?

看你的代码应该是在UWP环境下处理字节流解析吧?要把Scenario2_Client里的解析结果传到Scenario3_Exercise页面,给你几个实用的方案,按需选就行:

方案1:通过导航参数直接传递(最常用)

如果你的页面是用Frame导航打开的,直接把值塞进导航参数里就好:

  1. 在Scenario2_Client页面,导航到Scenario3_Exercise时传入数据:
// 比如在触发导航的事件里(按钮点击、逻辑完成后)
// 可以直接传拼接好的字符串o
Frame.Navigate(typeof(Scenario3_Exercise), o);

// 要是后续需要单独用X/Y/Z,传结构化数据更方便
// Frame.Navigate(typeof(Scenario3_Exercise), new { X = vals[0], Y = vals[1], Z = vals[2] });
  1. 在Scenario3_Exercise页面,重写OnNavigatedTo方法接收参数:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);
    if (e.Parameter != null)
    {
        // 接收拼接好的字符串o
        string receivedContent = e.Parameter.ToString();
        // 比如把值显示在UI上:MyDisplayTextBlock.Text = receivedContent;

        // 要是传的是结构化对象,用dynamic转换或者定义实体类
        // dynamic coordinates = e.Parameter;
        // string x = coordinates.X;
        // string y = coordinates.Y;
        // string z = coordinates.Z;
    }
}

方案2:用全局静态类存数据(适合多页面共享)

如果需要跨多个页面访问这些值,或者不想依赖导航参数,可以建个静态类当数据容器:

  1. 新建一个静态类(比如AppGlobalData.cs):
public static class AppGlobalData
{
    // 存拼接好的字符串
    public static string FullCoordinateString { get; set; }
    // 也可以单独存每个坐标值,方便后续使用
    public static string XCoord { get; set; }
    public static string YCoord { get; set; }
    public static string ZCoord { get; set; }
}
  1. 在Scenario2_Client处理完数据后赋值:
// 你的原有代码
DataReader r = DataReader.FromBuffer(result.Value); 
Byte[] b = new byte[result.Value.Length]; 
r.ReadBytes(b); 
String s = Encoding.ASCII.GetString(b); 
String[] vals = s.Split(';'); 
String o = "X=" + vals[0] + " Y=" + vals[1] + " Z=" + vals[2];

// 给静态类赋值
AppGlobalData.FullCoordinateString = o;
AppGlobalData.XCoord = vals[0];
AppGlobalData.YCoord = vals[1];
AppGlobalData.ZCoord = vals[2];
  1. 在Scenario3_Exercise页面直接读取静态类的值:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);
    // 读取拼接好的字符串
    string receivedO = AppGlobalData.FullCoordinateString;
    // 或者读取单个坐标值
    string x = AppGlobalData.XCoord;
    // 接下来就可以用这些值做后续逻辑了
}

方案3:用事件通知(适合异步/解耦场景)

如果你的数据是异步获取的,或者不想让两个页面直接耦合,用事件传递更灵活:

  1. 在Scenario2_Client页面定义静态事件:
// 定义事件,参数是要传递的字符串类型
public static event Action<string> CoordinatesParsed;
  1. 处理完数据后触发事件:
// 得到o之后触发事件
CoordinatesParsed?.Invoke(o);
  1. 在Scenario3_Exercise页面订阅事件并接收值:
public Scenario3_Exercise()
{
    this.InitializeComponent();
    // 订阅事件
    Scenario2_Client.CoordinatesParsed += OnCoordinatesReceived;
}

private void OnCoordinatesReceived(string coords)
{
    // 注意:如果要更新UI,得切回UI线程
    Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
    {
        // 比如把值显示在UI上:MyTextBlock.Text = coords;
    });
}

// 页面卸载时取消订阅,避免内存泄漏
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
    base.OnNavigatedFrom(e);
    Scenario2_Client.CoordinatesParsed -= OnCoordinatesReceived;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:38:20