C#页面间数据传递:如何将Scenario2_Client的值传给Scenario3_Exercise?
看你的代码应该是在UWP环境下处理字节流解析吧?要把Scenario2_Client里的解析结果传到Scenario3_Exercise页面,给你几个实用的方案,按需选就行:
方案1:通过导航参数直接传递(最常用)
如果你的页面是用Frame导航打开的,直接把值塞进导航参数里就好:
- 在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] });
- 在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:用全局静态类存数据(适合多页面共享)
如果需要跨多个页面访问这些值,或者不想依赖导航参数,可以建个静态类当数据容器:
- 新建一个静态类(比如
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; } }
- 在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];
- 在Scenario3_Exercise页面直接读取静态类的值:
protected override void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); // 读取拼接好的字符串 string receivedO = AppGlobalData.FullCoordinateString; // 或者读取单个坐标值 string x = AppGlobalData.XCoord; // 接下来就可以用这些值做后续逻辑了 }
方案3:用事件通知(适合异步/解耦场景)
如果你的数据是异步获取的,或者不想让两个页面直接耦合,用事件传递更灵活:
- 在Scenario2_Client页面定义静态事件:
// 定义事件,参数是要传递的字符串类型 public static event Action<string> CoordinatesParsed;
- 处理完数据后触发事件:
// 得到o之后触发事件 CoordinatesParsed?.Invoke(o);
- 在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
相关产品推荐
相关产品推荐

