티스토리 뷰

반응형

Microsoft.Toolkit.MVVM을 이용한 간단한 프레임워크 part7 - Windows Community Toolkit Upgrade (tistory.com)

 

Microsoft.Toolkit.MVVM을 이용한 간단한 프레임워크 part7 - Windows Community Toolkit Upgrade

2022.04.21 - [WPF .NET] - Microsoft.Toolkit.Mvvm을 이용한 간단한 프레임워크 part6 - 유효성 검사 추가 2022.04.15 - [WPF .NET] - Microsoft.Toolkit.Mvvm을 이용한 간단한 프레임워크 part5 - [ObservableProperty] 속성(2/2) 2022.04

kaki104.tistory.com

기본적인 내용은 위의 프로젝트를 참고 부탁드립니다.

 

툴킷의 기능 중 Message 기능을 사용할 때 수신하는 곳에서 아래와 같이 수신 등록을 하고

//LayerPopupMessage 수신 등록
WeakReferenceMessenger.Default.Register<LayerPopupMessage>(this, OnLayerPopupMessage);

메시지 발생시키는 곳에서는 아래와 같이 사용합니다.

WeakReferenceMessenger.Default.Send(new LayerPopupMessage(true) { ControlName = "AboutControl" });

그런데, 메시지를 보낼 때 구분자를 추가해서, 메시지는 동일한데 구분자를 이용해서, A나 B화면 선택적으로 메시지를 보내야하는 경우가 생길 수 있습니다. 그런 경우에는 아래와 같이 사용하시면 됩니다.

Token을 이용해서 수신처 지정

LayerPopupMessage가 Send될 때 Token(여기서는 string)이 "TEST1"이면, OnLayerPopupMessageToken1 메소드를 호출하고, "TEST2"이면 OnLayerPopupMessageToken2 메소드가 호출되도록 등록합니다.

WeakReferenceMessenger.Default.Register<LayerPopupMessage, string>(this, "TEST1", OnLayerPopupMessageToken1);
WeakReferenceMessenger.Default.Register<LayerPopupMessage, string>(this, "TEST2", OnLayerPopupMessageToken2);

private void OnLayerPopupMessageToken1(object recipient, LayerPopupMessage message)
{
    Debug.WriteLine("TEST1 Token");
}
private void OnLayerPopupMessageToken2(object recipient, LayerPopupMessage message)
{
    Debug.WriteLine("TEST2 Token");
}

Send할때는 아래와 같이 맨 끝에 Token 값을 입력합니다.

WeakReferenceMessenger.Default.Send(new LayerPopupMessage(true) { ControlName = "AboutControl" }, "TEST1");
WeakReferenceMessenger.Default.Send(new LayerPopupMessage(true) { ControlName = "AboutControl" }, "TEST2");

여기서는 하나의 뷰모델에 2개를 등록하고 테스트를 했지만, 다른 뷰모델에 각각 다른 Token값을 이용해서 지정하면, 특정 화면으로만 Message를 보낼 수 있습니다.

 

 

반응형
댓글
댓글쓰기 폼