C# 使用MVVM Light Messager发送和接收多个变量
使用MVVM发送和接收多个变量的正确方法是什么 在下面的代码中,我发送C# 使用MVVM Light Messager发送和接收多个变量,c#,wpf,mvvm,mvvm-light,C#,Wpf,Mvvm,Mvvm Light,使用MVVM发送和接收多个变量的正确方法是什么 在下面的代码中,我发送17表示年龄和100表示金额,但我收到0表示年龄,100表示金额 输出: <Button x:Name="button" Content="Send Message" Command="{Binding SendMessageCommand}"/> namespace MvvmLightMessager { public partial class MainWindow : Window {
17表示年龄
和100表示金额
,但我收到0表示年龄,100表示金额
输出:
<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 });
}
}
}
170
0
一百 我错过了什么 我是否需要为需要发送的每个变量使用不同的模型 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 });
}
}
}
视图模型:
<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 });
}
}
}
namespace MvvmLightMessager.ViewModel
{
公共类MainViewModel:ViewModelBase
{
public RelayCommand SendMessageCommand{get;private set;}
公共主视图模型()
{
SendMessageCommand=new RelayCommand(()=>SendMessage());
}
私有void SendMessage()
{
Send(newmymessage{Age=17});
sender.Default.Send(新的MyMessage{Amount=1000});
}
}
}
您可以分别发送两条消息。第一个,{17岁,金额0}
和{0岁,金额100}
。因此,输出打印2次,其中有2条记录17岁、金额0
和0岁金额100
。这完全正常你的期望是什么?您分别发送两条消息。第一个,{17岁,金额0}
和{0岁,金额100}
。因此,输出打印2次,年龄17,数量0,年龄0,数量100。这是完全正常的…哦,我明白了,他们应该像这样发送<代码>Messenger.Default.Send(新MyMessage{Age=17,Amount=100})代码>谢谢!我为其他人写下答案。