C#/Prism
[C# - Prism] 프리즘 예제 14 - UsingEventAggregator
반나무
2023. 8. 14. 22:17
안녕하세요, 반나무입니다.
이번 예제는 EventAggregator를 사용하는 방법을 안내합니다.
Aggregator 뭔가 단어만으로는 탁! 감이 오지않아서 검색해보니 어떤 정보를 모아서 제공하는 듯한 느낌이네요
EventAggregator는 여기저기 다른 모듈에 퍼져있는 Event들을 모아서 처리 할 수 있도록 해주는 기능입니다.
왼쪽이 ModuleA / 오른쪽이 ModuleB입니다.
UsingEventAggregator.Core
지난 예제에서 설명했듯이, 여러 모듈들이나 다양한곳에서 접근하는 기능들은 .Core에 생성합니다.
이번 예제에서는 Event를 .Core에 생성했습니다.
namespace UsingEventAggregator.Core
{
// MessageSentEvent라는 Event를 만든다
// string 타입의 데이터가 넘어온다는것을 알린다.
public class MessageSentEvent : PubSubEvent<string> { }
}
ModuleA
모듈A에서는 Message를 Binding해 입력받습니다.
public class MessageViewModel : BindableBase
{
IEventAggregator _ea;
private string _message = "Message to Send";
public string Message
{
get { return _message; }
set { SetProperty(ref _message, value); }
}
public DelegateCommand SendMessageCommand { get; private set; }
public MessageViewModel(IEventAggregator ea)
{
_ea = ea;
SendMessageCommand = new DelegateCommand(SendMessage);
}
private void SendMessage()
{
// EventAggregator에 메세지를 배포한다.
_ea.GetEvent<MessageSentEvent>().Publish(Message);
}
}
ModuleB
모듈B에서는 Event로 들어온 Message를 Collection에 Add하는 작업을 합니다.
public class MessageListViewModel : BindableBase
{
IEventAggregator _ea;
private ObservableCollection<string> _messages;
public ObservableCollection<string> Messages
{
get { return _messages; }
set { SetProperty(ref _messages, value); }
}
public MessageListViewModel(IEventAggregator ea)
{
_ea = ea;
Messages = new ObservableCollection<string>();
// Event를 구독한다. (콜백 메소드 구현)
_ea.GetEvent<MessageSentEvent>().Subscribe(MessageReceived);
}
// 콜백 메소드 : message로 받은 string을 ObservableCollection에 add한다.
private void MessageReceived(string message)
{
Messages.Add(message);
}
}
반응형