有如下几种方式:
1. 声明个全局变量,就是App.xaml里面声明;在所有窗体里面都可以引用 Application.Current.Properties["ArgumentName"];
2. 第二个就是 在目标窗体上面公开个 属性,直接赋值;
3. 最后就是在Uri里面传参数 NavigationService.Navigate(window object,argument value)
4. 采用事件响应,传递值。
举例:点击主窗口MainWindow 上的一个OpenSubWindow按钮 -> 打开子窗口SubWindow -> 在子窗口中的TextBox中输入值, 点击OK后关闭 -> 主窗口上的TextBox获取子窗口中的值。
1. 在子窗口中定义一个事件PassValuesEvent。 当点击 OK 按钮时,触发事件,并传递数值。( PassValuesEventArgs 是EventArgs类,需要同时定义好)
public partial class SubWindow : Window { public delegate void PassValuesHandler(object sender, PassValuesEventArgs e); public event PassValuesHandler PassValuesEvent; public SubWindow() { InitializeComponent(); } private void btnOK_Click(object sender, RoutedEventArgs e) { string value1 = tbValue1.Text; // Text Property return value is string type . int value2; Int32.TryParse(tbValue2.Text, out value2); PassValuesEventArgs args = new PassValuesEventArgs(value1, value2); PassValuesEvent(this, args); this.Close(); } }
2. 在主窗口中的OpenSubWindow按钮点击的方法中,订阅了PassValuesEvent事件。当事件触发时,获取传递的参数的值。
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void btnOpenSubWindow_Click(object sender, RoutedEventArgs e) { SubWindow subWindow = new SubWindow(); // 订阅事件 subWindow.PassValuesEvent += new SubWindow.PassValuesHandler(ReceiveValues); subWindow.Show(); } private void ReceiveValues(object sender, PassValuesEventArgs e) { this.tbValue1.Text = e.Value1; this.tbValue2.Text = e.Value2.ToString(); } }
若干年後更新:
在使用了MVVM后, 窗口閒的數據通訊實際上是Viewmodel之間的通訊, 這裏也有很多實現,其中,我個人喜歡MVVM Light 裏的Messager, 很簡單明瞭又好用.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人