(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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM