[WPF] Event Notifier 사용 방법

컴포넌트 간의 데이터를 주고받을 경우 Prism의 EventAggregator를 사용하면 편리하지만 WPF 만을 사용할 경우 아래 코드와 같이 구성하여 사용하였습니다.

Event Manager

EventManager.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
namespace Tool.Event
{
public class EventManager
{
public delegate void EventHandler();
event EventHandler event;

public void Subscribe(EventHandler handler)
{
event += handler;
}

public void UnSubscribe(EventHandler handler)
{
event -= handler;
}

public void Publish()
{
event?.Invoke();
}
}

public class EventManager<T>
{
public delegate void EventHandler(T item);
event EventHandler event;

public void Subscribe(EventHandler handler)
{
event += handler;
}

public void UnSubscribe(EventHandler handler)
{
event -= handler;
}

public void Publish(T item)
{
event?.Invoke(item);
}
}
}

Event Notifier

EventNotifier.cs

1
2
3
4
5
6
7
8
9
10
11
namespace Tool.Event
{
public class EventNotifier
{
public static EventManager<string> InputDataEvent = new EventManager<string>();

public static EventManager OpenEvent = new EventManager();

public static EventManager CloseEvent = new EventManager();
}
}

사용 예

이벤트 등록

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
namespace Tool.Views
{
public partial class TestWindow : Window
{
public TestWindow()
{
InitializeComponent();
}

private void CloseClick(object sender, RoutedEventArgs e)
{
this.Close();
EventNotifier.CloseEvent.Publish();
}
}
}

이벤트 받기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
namespace Tool.ViewModwl
{
public class MainWindowViewModwl
{
public MainWindow()
{
EventNotifier.CloseEvent.Subscribe(CloseEvent);
}

private void CloseEvent()
{
Console.WriteLine("CloseEvent");
}
}
}

위의 코드는 다른 Window 에서 창을 종료 시 메인 Window 의 기능을 수행하기 위한 예제입니다.

Share