순서
I. Create Event
II. Publish & Subscribe Event
1. Publish
2. Subscribe
Prism Library에서는 비 동기 이벤트를 위해 PubSub Event를 제공하고
Publish / Subscribe 사이의 Interface를 "IEventAggregator"로 제공한다.
비 동기 Message Queue vs PubSub Event
2023.02.11 - [Programming/기타] - [Programming][Architecture] Asynchronous Messaging Pattern
I. Create Event
"이 클래스를 이벤트 클래스로 사용할 것입니다" 라는 표시를 해주어야
Prism Library에서 이를 인식하고 Event로 발행할 수 있는데
그 방법은 사용할 Event Class에 PubSubEvent를 상속 받는 것이다.
using Prism.Events;
// 이렇게 사용한다.
public class myEventClass : PubSubEvent<string> {}
// 실제 Project에서 사용한 코드
using Prism.Events;
namespace MapEditer.Events
{
public class MapItemReadyEvent : PubSubEvent<string>
{
}
}
UI창인 Main Window에서 Map을 열었을 때 모든 Item들이 로딩 완료인 상태를
이벤트로 전달해주는 코드에 사용하였다.
이렇게 Event를 만들면 끝!
II. Publish & Subscribe Event
한번 더 Publish, Subscribe의 역할을 정리해보면
Publish = EventHandler 실행 = 이벤트를 발생시킴 = 발행
Subscribe = Delegate 저장 = 어떤 함수를 발생시킬지 등록 = 구독
Publish & Subscribe는 EventAggregator 메서드를 호출하여 진행한다.
1. Publish
myEventClass에 Subscribe시 설정한 Parameter를 인자 형식으로 하여
이벤트를 발행한다.(실행한다)
using Prism.Events;
public class MainPageViewModel
{
IEventAggregator _eventAggregator;
// IEventAggregator는 UI Main Window시 자동으로 호출된다.
public MainPageViewModel(IEventAggregator ea)
{
_eventAggregator = ea;
// Publish를 하는 순간 호출이 되므로
// 필요한 함수를 구현하여 내부에서 Publish하면 된다.
_eventAggregator.GetEvent<myEventClass>().Publish(Parameter);
}
}
2. Subscribe
Delegate에 함수를 등록 할 때 처럼 진행한다.
using Prism.Events;
public class MainPageViewModel2
{
myEventClass _event;
public MainPageViewModel2 (IEventAggregator ea) {
// Event를 가져오고
// Subscribe를 진행 -> 인자로 함수 넣어줌
ea.GetEvent<myEventClass>().Subscribe(callBackFunction);
// 이렇게 써도 된다.
_event = ea.GetEvent<myEventClass>();
_event.Subscribe(callBackFunction);
_event.Unsubscribe(callBackFunction); // 구독 해지시
}
void callBackFunction (parameter) {} // 구현부
}
'Programming > .NET(C#,WPF)' 카테고리의 다른 글
[Programmin][.NET] C# Canvas Drawing2 (Geometry class) (0) | 2023.03.17 |
---|---|
[Programmin][.NET] C# Canvas Drawing1 (Shape class) (0) | 2023.03.13 |
[Programming][.NET] Prism Command Binding (0) | 2023.02.12 |
[Programming][.NET] Prism Library 적용법 (0) | 2023.01.24 |