从另一个 ViewModel 发送时未收到 MVVM 消息
MVVM message not received when sending from another ViewModel
我创建了一个包含一些测验问题的详细信息页面。我需要将问题列表发送到 ViewModel。接收 ViewModel 中的数据始终为空。调试器甚至不进入 'ReceiveMessage' 方法。
这是我的发送部分:
Frame rootFrame = Window.Current.Content as Frame;
Messenger.Default.Send<List<QuizQuestion>>(this.Questions);
rootFrame.Navigate(typeof(QuestionOverviewPage));
这是我的接收视图模型:
public QuestionOverviewViewModel(IMessageDialogService dialogService, IRoundRepository rounRepository)
{
_dialogService = dialogService;
_rounRepository = rounRepository;
_quizQuestionsViewModels = new List<QuestionViewModel>();
Messenger.Default.Register<List<QuizQuestion>>
(
this,ReceiveMessage
);
}
private void ReceiveMessage(List<QuizQuestion> action)
{
Console.WriteLine(action);
}
MVVM message not received when sending from another ViewModel
Messenger.Default.Register
应该在发送之前调用,这一步会将订阅者传递给子列表,发送客户端会找到订阅者实例,然后调用带有参数的操作方法。
我发现你把 Messenger.Default.Register
放在了 QuestionOverviewViewModel 中,并且在 rootFrame.Navigate
之前调用了 Send 方法,所以你可以尝试在 rootFrame.Navigate
之后调用 send 方法。
Frame rootFrame = Window.Current.Content as Frame;
rootFrame.Navigate(typeof(QuestionOverviewPage));
Messenger.Default.Send<List<QuizQuestion>>(this.Questions);
我创建了一个包含一些测验问题的详细信息页面。我需要将问题列表发送到 ViewModel。接收 ViewModel 中的数据始终为空。调试器甚至不进入 'ReceiveMessage' 方法。 这是我的发送部分:
Frame rootFrame = Window.Current.Content as Frame;
Messenger.Default.Send<List<QuizQuestion>>(this.Questions);
rootFrame.Navigate(typeof(QuestionOverviewPage));
这是我的接收视图模型:
public QuestionOverviewViewModel(IMessageDialogService dialogService, IRoundRepository rounRepository)
{
_dialogService = dialogService;
_rounRepository = rounRepository;
_quizQuestionsViewModels = new List<QuestionViewModel>();
Messenger.Default.Register<List<QuizQuestion>>
(
this,ReceiveMessage
);
}
private void ReceiveMessage(List<QuizQuestion> action)
{
Console.WriteLine(action);
}
MVVM message not received when sending from another ViewModel
Messenger.Default.Register
应该在发送之前调用,这一步会将订阅者传递给子列表,发送客户端会找到订阅者实例,然后调用带有参数的操作方法。
我发现你把 Messenger.Default.Register
放在了 QuestionOverviewViewModel 中,并且在 rootFrame.Navigate
之前调用了 Send 方法,所以你可以尝试在 rootFrame.Navigate
之后调用 send 方法。
Frame rootFrame = Window.Current.Content as Frame;
rootFrame.Navigate(typeof(QuestionOverviewPage));
Messenger.Default.Send<List<QuizQuestion>>(this.Questions);