WPF Prism v8 : Service와 module

image

‘Prism Full App (WPF)’ 솔루션을 생성했습니다.

해당 솔루션에서 Module에서 Service에 있는 함수를 호출하는 방법은 제시가 되어있습니다.
그런데 Service에서 발생한 정보를 Module에 View에 보여주고싶습니다.

이 경우 Viewmodel이 GetMessage()를 해서 데이터가 있는지 확인해야하는건지
Service에서 직접 이벤트나 함수호출해 Viewmodel에게 데이터를 줄 수 있는 방법이 있는지 아시나요

publisher를 사용해 넘길 수는 있는데 Service가 Module을 참조하게되니 이 방법이 올바른건지 모르겠습니다.

어느 방법이 올바른 방법인지 모르겠어서 질문합니다.

2개의 좋아요

Event Handler를 이용하면 어떨까요??

//IMessageService.cs
namespace FullApp1.Services.Interfaces
{
    public interface IMessageService
    {
        event EventHandler ReceivedMsg;
        void ReceivedMsgAction();

        string GetMessage();
    }
}

//MessageService.cs
namespace FullApp1.Services
{
    public class MessageService : IMessageService
    {
        public event EventHandler ReceivedMsg;

        public void ReceivedMsgAction()
        {
            OnReceivedMsg(new EventArgs());
        }

        private void OnReceivedMsg(EventArgs eventArgs)
        {
            if (ReceivedMsg != null)
            {
                ReceivedMsg(this, eventArgs);
            }
        }

        public string GetMessage()
        {
            return "message";
        }

        public MessageService()
        {
            Task.Run( async () =>
            {
                while (true)
                {
                    OnReceivedMsg(new EventArgs());
                    await Task.Delay(1000);
                }
            });
        }        
    }
}


//ViewAiewModel.cs
namespace FullApp1.Modules.ModuleName.ViewModels
{
    public class ViewAViewModel : RegionViewModelBase
    {
        private string _message;
        public string Message
        {
            get { return _message; }
            set { SetProperty(ref _message, value); }
        }

        public ViewAViewModel(IRegionManager regionManager, IMessageService messageService) :
            base(regionManager)
        {
            Message = messageService.GetMessage();

            messageService.ReceivedMsg += MessageService_ReceivedMsg; ;
        }

        private void MessageService_ReceivedMsg(object sender, System.EventArgs e)
        {
            
        }

        public override void OnNavigatedTo(NavigationContext navigationContext)
        {
            //do something
        }
    }
}


3개의 좋아요

이러면 interface만 참조한 상태 그대로 event로 message를 넘겨받을 수 있군요! 확실한 해결법이었습니다

2개의 좋아요