Recipient = 수신자  → 상태 변경을 감지할 수 있으며, 메시지를 수신할 수 있는 ViewModel


1️⃣ ObservableRecipient 개요

더보기
📚 Microsoft Docs: ObservableRecipient

 

 

✅ CommunityToolkit.Mvvm Naming Convention(명칭 철학)

클래스명 역할
ObservableObject 속성 변경 감지 가능 (기본 ViewModel의 역할)
RelayCommand ICommand 생성기
ObservableValidator 유효성 검증 가능한 ViewModel
ObservableRecipient 메시지 수신 기능이 포함된 ViewModel

 

변화(Observable)를 감지하고 메시지를 받는 객체(수신자, Recipient)

ViewModel이면서 메시지 시스템을 지원하는 이상적인 베이스 클래스 역할

 

 

공유한 링크는 .NET Community ToolkitObservableRecipient 클래스에 대한 문서입니다.

이 클래스는 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)