【问题标题】:MVVM message not received when sending from another ViewModel从另一个 ViewModel 发送时未收到 MVVM 消息
【发布时间】: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&lt;List&lt;QuizQuestion&gt;&gt;(this.Questions);
  • 我的意思是Messenger.Default.Register&lt;List&lt;QuizQuestion&gt;&gt; 在发送消息之前调用了?
  • 我发现你把Messenger.Default.Register放在QuestionOverviewViewModel中,Send方法在rootFrame.Navigate之前调用,所以你可以尝试在rootFrame.Navigate之后调用send方法。
  • @NicoZhu-MSFT 你是我的英雄!非常感谢你。这解决了问题。我认为rootFrame.Navigate 会停止当前的VIewModel。所以它之后的所有代码都不会被调用。但似乎并非如此。

标签: c# uwp mvvm-light


【解决方案1】:

从另一个 ViewModel 发送时未收到 MVVM 消息

Messenger.Default.Register应该在发送之前调用,这一步会将订阅者传递给子列表,发送客户端会找到订阅者实例然后调用带有参数的action方法。

我发现你把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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    相关资源
    最近更新 更多