zoukankan      html  css  js  c++  java
  • (WPF) 窗口间传参数

    有如下几种方式:

    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, 很簡單明瞭又好用.

    http://dotnetpattern.com/mvvm-light-messenger

  • 相关阅读:
    WinCE数据库开发时整出来的一个致命的BUG
    WinCE下读取注册表获得SD卡路径
    Cookie的创建、读写和删除
    Http Module 介绍[转]
    贴几个从Dnt论坛代码里边扣出来的函数
    SqlServer判断数据库、表、存储过程、函数是否存在
    WinCE中C#WinForm利用Web Service查询数据库
    关于WinCE和PC中同一字符串的GetHashCode()结果不同的理解
    DataTable中数据记录的统计
    C#读取XML时自动过滤掉注释部分
  • 原文地址:https://www.cnblogs.com/fdyang/p/2980451.html
Copyright © 2011-2022 走看看