.NET MAUI - MVVM ObservableRecipient

2022. 8. 11. 00:00MAUI

반응형

ObservableRecipient 유형은 메시지의 수신자 역할도 하는 관찰 가능한 개체의 기본 클래스입니다. 이 클래스는 IMessenger 유형을 사용하기 위한 지원도 제공하는 ObservableObject의 확장입니다.

 

  • viewmodel에서 메시지를 보내고 받는 데 사용할 수 있는 Messenger 속성을 노출합니다
  • 뷰 모델을 활성화/비활성화하는 IsActive 속성을 노출합니다. 이 컨텍스트에서 "활성화"한다는 것은 주어진 뷰 모델이 사용 중인 것으로 표시된다는 것을 의미합니다. 등록된 메시지 수신을 시작하고 다른 설정 작업을 수행하는 등의 작업을 수행합니다. 속성 값이 변경될 때 호출되는 OnActivated 및 OnDeactivated의 두 가지 관련 메서드가 있습니다. 기본적으로 OnDeactivated는 등록된 모든 메시지에서 현재 인스턴스를 자동으로 등록 취소합니다. 최상의 결과를 얻고 메모리 누수를 방지하려면 OnActivated를 사용하여 메시지를 등록하고 OnDeactivated를 사용하여 정리 작업을 수행하는 것이 좋습니다. 이 패턴을 사용하면 뷰 모델을 여러 번 활성화/비활성화할 수 있으며 비활성화될 때마다 메모리 누수 위험 없이 안전하게 수집할 수 있습니다. 기본적으로 OnActivated는 IRecipient<TMessage> 인터페이스를 통해 정의된 모든 메시지 처리기를 자동으로 등록합니다.
  • Messenger 속성에서 사용할 수 있는 IMessenger 인스턴스를 통해 PropertyChangedMessage<T> 메시지를 보내는 Broadcast<T>(T, T, string) 메서드를 노출합니다. 이것은 사용할 메신저 인스턴스를 수동으로 검색할 필요 없이 뷰 모델 속성의 변경 사항을 쉽게 브로드캐스트하는 데 사용할 수 있습니다. 이 메서드는 메시지를 보낼지 여부를 나타내는 추가 bool 브로드캐스트 속성이 있는 다양한 SetProperty 메서드의 오버로드에서 사용됩니다.

 

등록은 다음과 같이 할 수 있습니다. 

public class MyViewModel : ObservableRecipient, IRecipient<LoggedInUserRequestMessage>
{
    public void Receive(LoggedInUserRequestMessage message)
    {
        // Handle the message here
    }
}

위와 같이 할 경우 OnActivated 에서 자동으로 LoggedInUserRequestMessage 가 등록 되며

직접 등록되도록 할수 있다. 

public class MyViewModel : ObservableRecipient
{
    protected override void OnActivated()
    {
        // Using a method group...
        Messenger.Register<MyViewModel, LoggedInUserRequestMessage>(this, (r, m) => r.Receive(m));

        // ...or a lambda expression
        Messenger.Register<MyViewModel, LoggedInUserRequestMessage>(this, (r, m) =>
        {
            // Handle the message here
        });
    }

    private void Receive(LoggedInUserRequestMessage message)
    {
        // Handle the message here
    }
}

위와 같이 처리 하면 이전과 같은 형태가 된다.

 

 

 

관련영상

https://youtu.be/UqIzki48Evo

 

 

반응형

'MAUI' 카테고리의 다른 글

.NET MAUI - MVVM Command  (0) 2022.08.15
.NET MAUI - MVVM ObservableValidator  (0) 2022.08.12
.NET MAUI - MVVM ObservableObject  (0) 2022.08.10
.NET MAUI - MVVM and CommunityToolkit.Mvvm  (0) 2022.08.09
.NET MAUI - Behaviors  (0) 2022.08.08