Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用MVVM Light Messager发送和接收多个变量_C#_Wpf_Mvvm_Mvvm Light - Fatal编程技术网

C# 使用MVVM Light Messager发送和接收多个变量

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 {

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

在下面的代码中,我发送
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 });
        }
    }
}
17
0
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})谢谢!我为其他人写下答案。