[C# - Prism] 프리즘 예제 15 - FilteringEventC#/Prism2023. 8. 27. 14:29
Table of Contents
안녕하세요, 반나무입니다.
이번 예제는 지난 예제에 이어서 EventAggregator를 사용합니다.
Event를 Filtering해 원하는 Event만 사용 할 수 있게 하는 방법을 안내합니다.
다른 부분 코드는 동일하며 Event를 Subcribe(구독)하는 부분에서 코드가 다릅니다.
ModuleB
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>();
// MessageRecieved : 실행시킬 callback method
// ThreadOption : callback method를 어떤 thread로 실행시킬지 선택
// keepSubscriberReferenceAlive : true일 경우 GC가 가져가지 못하게 참조를 걸어둠
// filter : 해당 필터 조건에 맞는 이벤트만 실행함
_ea.GetEvent<MessageSentEvent>().Subscribe(MessageReceived, ThreadOption.PublisherThread, false, (filter) => filter.Contains("Brian"));
}
private void MessageReceived(string message)
{
Messages.Add(message);
}
}
ThreadOption
두번째 옵션으로 ThreadOption을 사용할 수 있는데 해당 옵션의 차이는 아래와 같습니다.
어떤 Thread로 작업시킬것인지 판단해 옵션을 선택하면되며 함수 Remark에는 해당 함수가 ThreadSafe하다고 안내하고있습니다.
- PublisherThread(기본) : 주 Thread에서 실행됩니다.
- BackgroundThread : 작업자 Thread에서 실행됩니다.
- UIThread : UI를 다루는 작업을 사용할때 사용하며, UI Thread에서 실행됩니다.(예제에서는 주 Thread가 UI Thread)
Filter
현재 필터는 Brian이라는 string이 들어가지 않으면 실행되지 않게 해둔 상태입니다.
string으로 필터링하는 예제 밖에없어서 다른 방법으로는 어떻게 쓸 수 있을지 감이안오네요.
반응형
'C# > Prism' 카테고리의 다른 글
[C# - Prism] 프리즘 예제 17- BasicRegionNavigation (0) | 2023.09.03 |
---|---|
[C# - Prism] 프리즘 예제 16 - RegionContext (0) | 2023.09.02 |
[C# - Prism] 프리즘 예제 14 - UsingEventAggregator (0) | 2023.08.14 |
[C# - Prism] 프리즘 예제 13 - IActiveAwareCommands (0) | 2023.08.08 |
[C# - Prism] 프리즘 예제 12 - UsingCompositeCommands (0) | 2023.08.06 |
@반나무 :: 반나무_뿌리
3년차 WPF 개발자입니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!