【发布时间】:2018-07-14 17:26:33
【问题描述】:
使用 MVVM Light Messanger 发送和接收多个变量的正确方法是什么?
在下面的代码中,我发送 17 for Age 和 100 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<MyMessage>(new MyMessage { Age = 17 , Amount = 100});谢谢! -
我为其他人写下答案。
标签: c# wpf mvvm mvvm-light