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

WinUI(C#):如何正确实现页面间的数据共享?

WinUI页面间共享设置属性的实现问题

我是WinUI开发新手,正在使用Visual Studio开发一款UI应用,该应用通过含属性的JSON文件与控制台程序交互。UI包含两个主模块和一个设置页面,页面间共享部分需写入JSON文件的属性,我认为NavigationView非常适配需求,且希望避免单窗口架构。这是一款Windows Forms旧应用的重构版本,旧版仅含少量控件与带菜单的主窗口。

已尝试的方案及问题

1. 读取其他页面的属性/变量

  • 使用静态对象可行,但需大量手动操作关联控件;
  • 同类方案同样需大量手动操作;
  • 创建双实例无效,各实例更新相互独立。

2. 绑定控件到静态属性

  • 未找到WinUI相关指南,参考其他方案尝试;
  • 无论通过XAML或代码后置创建实例并更新,均无法同步源属性;
  • 尝试使用非静态属性并跨页创建实例,同样无效(可能操作有误)。

3. 参考StackOverflow相关方案但多数无效

  • 某MAUI方案推荐的DependencyService为Xamarin专属,不适配WinUI;
  • 大量方案仅适用于Forms、Framework等其他应用类型,无法迁移至WinUI。

4. 尝试MVVM模式

  • 仅在同一页面内生效,跨页实例无法同步源属性;
  • 前述静态对象方案结合MVVM仍无效;
  • 尝试Toolkit MVVM包并模仿Template Studio for WinUI的实现,无改善;
  • 了解到可通过Main ViewModel实现ViewModel及页面间数据共享,但不知如何操作及是否可行。

5. 顾虑Template Studio的文件读写方案性能

  • Template Studio的主题切换设置会写入独立文件,这是我需避免的(我的UI设置文件需支持文本编辑器修改);
  • 文件读写需为每个控件添加命令,效率不如手动关联方案;
  • 虽存在绑定INI/XML/JSON等设置文件的方案,但因性能顾虑未深入研究。

6. 其他尝试的方案

  • DynamicMethod性能差且无法解决问题;
  • 依赖属性性能已改善但因无合适教程无法实现,若为推荐方案可提供无效代码。

代码示例

1. 静态属性需大量手动赋值

Page1 (XAML)

<ToggleSwitch x:Name="test" Header="test switch" OffContent="Off" OnContent="On" Toggled="test_Toggled"/>

Page1 代码后置(C#)

[...]
public static MyClass Test { get; set; }
[...]
private void test_Toggled(object sender, RoutedEventArgs e)
{
    Test.TestSwitch = test.IsOn;
}
[...]

Page2 代码后置(C#)

using static Namespace.Page1;
[...]
TextBox.Text = Test.TestSwitch.ToString();
[...]

2. 无法实现正确静态绑定,非静态属性跨页无效

Page1 (XAML)

<ToggleSwitch x:Name="test" Header="test switch" IsOn="{x:Bind Test.TestSwitch, Mode=TwoWay}" OffContent="Off" OnContent="On"/>
<TextBox x:Name="test2" Text="{x:Bind Test.TestSwitch, Mode=OneWay}"/> <!--works-->

Page1 代码后置(C#)

[...]
public MyClass Test { get; }
[...]

Page2 代码后置(C#)

[...]
Page1 P1 = new();
TextBox.Text = P1.Test.TestSwitch.ToString();
[...]

现咨询该场景下页面间数据共享的正确实现方式,是否有开发者有相关经验?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 22:17:05