2011-10-26 3 views
6

두 개의 WPF 창이 있습니다. 하나는 기본 창이고 다른 하나는 일부 구성 창입니다. 구성 창에서 기본 창으로 보내고 이벤트를 보내고 싶습니다. 내가 어떻게 완성했는지 궁금하십니까?두 개의 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

관련 문제