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# 如何在wpf中单击按钮时将信息从一个窗体传递到另一个窗体的viewModel_C#_Wpf_Xaml_Button - Fatal编程技术网

C# 如何在wpf中单击按钮时将信息从一个窗体传递到另一个窗体的viewModel

C# 如何在wpf中单击按钮时将信息从一个窗体传递到另一个窗体的viewModel,c#,wpf,xaml,button,C#,Wpf,Xaml,Button,我在wpf表格1和表格2中有两个表格 在表格1中,我有两个单选按钮和一个按钮控件。 单击按钮时,发生以下操作: private void button1_Click(object sender, RoutedEventArgs e) { form2 md = new form2(); md.Show(); this.Close(); } form2代码如下所示: private MainWindowViewModel mainWindowViewModel; p

我在wpf表格1和表格2中有两个表格

在表格1中,我有两个单选按钮和一个按钮控件。 单击按钮时,发生以下操作:

private void button1_Click(object sender, RoutedEventArgs e)
{

    form2 md = new form2();
    md.Show();
    this.Close();
}
form2代码如下所示:

 private MainWindowViewModel mainWindowViewModel;

 public form2()
 {
       InitializeComponent();
       this.mainWindowViewModel = new MainWindowViewModel(this);
       base.DataContext = this.mainWindowViewModel;
  }
MainviewModel,其中包含与数据显示相关的所有逻辑

我的问题是:

用户可以从给定选项中选择任何单选按钮,然后按OK按钮。 如果用户选择单选按钮1,那么我想获取单选按钮的内容,它将转到form2,然后转到mainviewModel类,该类可以替换以下代码:

em = EmFact.CreateEm(Protocol.Pro1, 2);

因此,代替Protocol.Pro1,它应该采用radiobutton内容。

我已经很久没有处理WPF了,但据我所知,您有能力修改表单的构造函数吗?那么,为什么不将信息作为参数传递呢。在事件中显示表单时,您正在创建表单的实例,因此可以将其传递到构造函数中


抱歉,如果这没有帮助

如果我正确地假设您有两个模型,您想在它们之间传递数据

从Nuget安装MvvmLight。它包括一个消息传递命名空间,它为您提供了一种将对象作为消息发送的方式。您可以在视图模型构造函数中注册一种处理此数据的方法,当然,这可以用于更新属性

请查看演练

基本示例是登录场景:

我们的登录视图模型将发送一条消息:

MessageBroker.Messenger.Send<LoginSuccessMessage>(new LoginSuccessMessage() { UserName = "user" });
MessageBroker.Messenger.Send(新登录成功消息(){UserName=“user”});
在本例中,我们传递一个LoginSuccessMessage对象,该对象只有一个username属性。。。 然后在另一个视图模型中,我们注册一个处理程序:

this.MessengerInstance.Register<LoginSuccessMessage>(this, this.OnLoginSuccessMessage);

private async void OnLoginSuccessMessage(LoginSuccessMessage message)
    {
        this.CurrentUserName = message.UserName;
    }
this.MessengerInstance.Register(this,this.onLoginSucessMessage);
专用异步void OnLoginSuccessMessage(LoginSuccessMessage)
{
this.CurrentUserName=message.UserName;
}

希望这有帮助。

Form1只是一个简单的选择窗口,没有相应的viewmodel,对于Form2,我有viewmodel和Model。我希望现在我的问题已经清楚了。幸运的是,Messenger作为一个单独的组件提供,因此您可以在表单代码中使用它,就像在第一视图模型中一样。同样,您可以在form2的代码隐藏中注册message receive事件。你只需要完全限定它。。。GalaSoft.MvvmLight.Messaging.Messenger.Default.Send(T)GalaSoft.MvvmLight.Messaging.Messenger.Default.Register(…)