jjsuk
1
![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
}
}
}
4개의 좋아요
jjsuk
3
이러면 interface만 참조한 상태 그대로 event로 message를 넘겨받을 수 있군요! 확실한 해결법이었습니다
2개의 좋아요