C# 如何在wpf中单击按钮时将信息从一个窗体传递到另一个窗体的viewModel
我在wpf表格1和表格2中有两个表格 在表格1中,我有两个单选按钮和一个按钮控件。 单击按钮时,发生以下操作: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
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(…)