07. ObservableRecipient - 개요
Recipient = 수신자 → 상태 변경을 감지할 수 있으며, 메시지를 수신할 수 있는 ViewModel
1️⃣ ObservableRecipient 개요
더보기
📚 Microsoft Docs: ObservableRecipient


✅ CommunityToolkit.Mvvm Naming Convention(명칭 철학)
클래스명 | 역할 |
ObservableObject | 속성 변경 감지 가능 (기본 ViewModel의 역할) |
RelayCommand | ICommand 생성기 |
ObservableValidator | 유효성 검증 가능한 ViewModel |
ObservableRecipient | 메시지 수신 기능이 포함된 ViewModel |
변화(Observable)를 감지하고 메시지를 받는 객체(수신자, Recipient)
ViewModel이면서 메시지 시스템을 지원하는 이상적인 베이스 클래스 역할
공유한 링크는 .NET Community Toolkit의 ObservableRecipient 클래스에 대한 문서입니다.
이 클래스는 ObservableObject와 IRecipient<TMessage>를 결합하여 만든 ViewModel 전용 수신자 기반 클래스입니다.
MVVM 아키텍처에서 메시지 기반 통신을 간편하게 사용할 수 있도록 도와줍니다.
2️⃣ ObservableRecipient 작동 방식
더보기
✅ 작동 방식
ObservableRecipient : ObservableObject, IRecipient<TMessage>
- ObservableObject: INotifyPropertyChanged를 구현하여 프로퍼티 변경 알림을 제공
- IRecipient<T>: 메시지를 수신할 수 있는 기능 (Messenger 기반)
즉, ObservableRecipient는 속성 바인딩 기능과, 메신저 기반 메시지 수신 기능을 동시에 제공합니다.
✅ 사용법
// 메시지 전송 (MainViewModel 등에서)
var message = new StudentSelectedMessage(selectedStudent, "DetailView");
WeakReferenceMessenger.Default.Send(message);
// 메시지 수신 (DetailViewModel에서)
public void Receive(StudentSelectedMessage message)
{
// 메시지가 자신을 위한 것인지 확인
if (message.TargetView == "DetailView")
{
StudentInfo = message.SelectedStudent;
}
}
구성 |
요소설명 |
Messenger | WeakReferenceMessenger.Default로 메시지를 보내고 받음 |
IsActive | true일 때만 메시지를 수신할 수 있음 (디폴트: false) |
Receive(TMessage) | 메시지를 받았을 때 자동으로 실행되는 메서드 |
WeakReferenceMessenger.Default.RegisterAll(this) | 수신자 등록 – 자동 등록도 가능하지만 명시적 호출 권장 |
[MainViewModel] ---> (Messenger.Send)
↓
[ObservableRecipient]
↓
Receive(TMessage)
- 메시지는 전역 메신저 인스턴스를 통해 전달됨
- 수신자는 IsActive가 true여야 하고 Receive()를 구현해야 수신 가능
- 등록은 Register 혹은 RegisterAll로 수행 가능
✅ 적용 예시
- 뷰 간 데이터 전달
- 탭 간 상태 전달
- 다이얼로그 창 열기 (메시지 기반)
- 글로벌 상태 공유 (User 로그인 정보 등)
2️⃣ 예제 파일 (예제1 ~ 4)