【发布时间】:2019-12-11 08:42:54
【问题描述】:
我创建了一个包含一些测验问题的详细信息页面。我需要将问题列表发送到 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);
}
【问题讨论】:
-
在
Send问题列表之前是否调用了QuestionOverviewViewModel方法? -
@NicoZhu-MSFT 我调试了它。
rootFrame.Navigate触发页面交换。所以首先调用Messenger.Default.Send<List<QuizQuestion>>(this.Questions);。 -
我的意思是
Messenger.Default.Register<List<QuizQuestion>>在发送消息之前调用了? -
我发现你把
Messenger.Default.Register放在QuestionOverviewViewModel中,Send方法在rootFrame.Navigate之前调用,所以你可以尝试在rootFrame.Navigate之后调用send方法。 -
@NicoZhu-MSFT 你是我的英雄!非常感谢你。这解决了问题。我认为
rootFrame.Navigate会停止当前的VIewModel。所以它之后的所有代码都不会被调用。但似乎并非如此。
标签: c# uwp mvvm-light