【问题标题】:Sending and receiving multiple variables using MVVM Light Messager使用 MVVM Light Messager 发送和接收多个变量
【发布时间】:2018-07-14 17:26:33
【问题描述】:

使用 MVVM Light Messanger 发送和接收多个变量的正确方法是什么?

在下面的代码中,我发送 17 for Age100 for Amount,但我收到的年龄为 0,金额为 100。

输出:

17
0
0
100

我错过了什么?

我需要为每个需要发送的变量使用不同的模型吗?

XAML:

<Button x:Name="button" Content="Send Message" Command="{Binding SendMessageCommand}"/>

代码隐藏:

namespace MvvmLightMessager
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            Messenger.Default.Register<MyMessage>(this, m => ReceivedMessageFromMyViewModel(m));
            Closing += (s, e) => ViewModelLocator.Cleanup();
        }

        private void ReceivedMessageFromMyViewModel(MyMessage m)
        {
            Console.WriteLine(m.Age);
            Console.WriteLine(m.Amount);
            // Output
            // 17
            // 0
            // 0
            // 100
        }
    }
}

型号:

namespace MvvmLightMessager.Model
{
    class MyMessage
    {
        public double Age { get; set; }
        public double Amount { get; set; } 
    }
}

视图模型:

namespace MvvmLightMessager.ViewModel
{ 
    public class MainViewModel : ViewModelBase
    {
        public RelayCommand SendMessageCommand { get; private set; } 
        public MainViewModel()
        {
            SendMessageCommand = new RelayCommand(() => SendMessage());
        }

        private void SendMessage()
        {
            Messenger.Default.Send<MyMessage>(new MyMessage { Age = 17 });
            Messenger.Default.Send<MyMessage>(new MyMessage { Amount = 1000 });
        }
    }
}

【问题讨论】:

  • 您的期望是什么?您分别发送 2 条消息。第一个,{Age 17, Amount 0}{Age 0, Amount 100}。所以,输出打印 2 次,年龄 17,金额 0,年龄 0 金额 100。这完全正常......
  • 哦,我明白了,他们应该像这样发送...Messenger.Default.Send&lt;MyMessage&gt;(new MyMessage { Age = 17 , Amount = 100}); 谢谢!
  • 我为其他人写下答案。

标签: c# wpf mvvm mvvm-light


【解决方案1】:

您分别发送 2 条消息。第一个,{Age 17, Amount 0}{Age 0, Amount 100}。因此,输出打印 2 次,有 2 条记录 Age 17, Amount 0Age 0 Amount 100。完全正常

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多