.NET MAUI - MVVM ObservableRecipient
2022. 8. 11. 00:00ㆍMAUI
반응형
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
}
}
위와 같이 처리 하면 이전과 같은 형태가 된다.
관련영상
반응형
'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 |