2011-10-26 3 views
6

2つのWPFウィンドウがあります。 1つはメインウィンドウで、もう1つは設定ウィンドウです。 設定ウィンドウをメインウィンドウに送信したいと思います。 どのように私はそれを達成する任意のアイデアですか?2つのWPFウィンドウ間でイベントを送信する

これは、私が作成し、設定ウィンドウを開く方法です:

private void MenuItem_Click(object sender, RoutedEventArgs e) 
    { 
     ConfigPage Confwin= new ConfigPage(); 
     Confwin.Owner = this; 
     Confwin.Show(); 
    } 
+0

誰が設定ウィンドウを作成していますか? MVVMを使用していますか? – sll

答えて

15

あなたはあなたの子ウィンドウクラスのすべてのイベントを定義して、ウィンドウを表示する前にそれを購読することができます。

メインウィンドウ

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     this.Loaded += new RoutedEventHandler(MainWindow_Loaded); 
    } 

    void MainWindow_Loaded(object sender, RoutedEventArgs e) 
    { 
     Child childWindow = new Child(); 
     childWindow.MyEvent += new EventHandler(childWindow_MyEvent); 

     childWindow.ShowDialog(); 
    } 

    void childWindow_MyEvent(object sender, EventArgs e) 
    { 
     // handle event 
     MessageBox.Show("Handle"); 
    } 
} 

子ウィンドウ

public partial class Child : Window 
{ 
    // define event 
    public event EventHandler MyEvent; 

    protected void OnMyEvent() 
    { 
     if (this.MyEvent != null) 
      this.MyEvent(this, EventArgs.Empty); 
    } 

    public Child() 
    { 
     InitializeComponent(); 

     this.Loaded += new RoutedEventHandler(Child_Loaded); 
    } 

    void Child_Loaded(object sender, RoutedEventArgs e) 
    { 
     // call event 
     this.OnMyEvent(); 
    } 
} 
+2

とても素敵で清潔な方法です。また、イベント処理の基本構造を理解するための非常に簡単なコードです。私からの+1 ... – phil13131

+1

また、いくつかの素直な感謝の意を表したいと思います。これは、私自身のイベントハンドラの設定の基礎を理解する助けとなりました。 – unrealtrip

2

あなたは弱いイベントパターンを使用する必要があります。それはPrismまたはMVVMLightを使用する場合に組み込まれています。

そうでない場合、あなたはそれを自分で実装する必要があります:msdn

その理由、それはメインウィンドウから設定ウィンドウを切り離すことです。
設定ウィンドウが再利用できるように(そしてアプリ内のオブジェクトがイベントを聴くことができるように)、互いに知っているべきではありません。

+0

+1良い点は、プリズムは有望に見える – walter