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

时间:2014-07-23 10:10:23

标签: c# wpf xaml button

我在wpf form1和form2中有两个表单。

在form1中,我有两个单键控制按钮。 按钮点击事件发生以下操作:

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,所以我想获取radiobutton的内容,它将转到form2,然后转到mainviewModel类,它可以替换以下代码:

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

所以取代Protocol.Pro1,它应该采用radiobutton内容。

2 个答案:

答案 0 :(得分:1)

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

对不起,如果没有帮助

答案 1 :(得分:0)

如果我正确地假设您有两个模型要在两者之间传递数据?

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

查看at JesseLiberty.com进行演练。

基本示例是登录方案:

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

MessageBroker.Messenger.Send<LoginSuccessMessage>(new LoginSuccessMessage() { UserName = "user" });

在这种情况下,我们传递一个LoginSuccessMessage对象,该对象只有一个用户名属性... 然后在另一个视图模型中,我们注册一个处理程序:

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

private async void OnLoginSuccessMessage(LoginSuccessMessage message)
    {
        this.CurrentUserName = message.UserName;
    }

希望这有帮助。