【问题标题】:How to pass information from one form to another form of viewModel on button click in wpf如何在wpf中单击按钮时将信息从一种形式传递到另一种形式的viewModel
【发布时间】:2014-07-23 10:10:22
【问题描述】:

我在 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,那么我想获取单选按钮的内容,它将转到form2,然后转到可以替换以下代码的mainviewModel类:

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

所以代替 Protocol.Pro1,它应该采用单选按钮内容。

【问题讨论】:

    标签: c# wpf xaml button


    【解决方案1】:

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

    对不起,如果这没有帮助

    【讨论】:

      【解决方案2】:

      如果我假设您有两个模型要在它们之间传递数据是正确的?

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

      查看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;
          }
      

      希望这会有所帮助。

      【讨论】:

      • Form1 只是简单的选择窗口,没有对应的视图模型,对于 Form2,我有视图模型和模型。我希望我现在清楚我的问题了。
      • 幸运的是,Messenger 可以作为单例使用,因此您可以在后面的表单代码中使用它,就像在第一个视图模型中一样。同样,您可以在 form2 后面的代码中注册消息接收事件。您只需要完全限定它... GalaSoft.MvvmLight.Messaging.Messenger.Default.Send(T) GalaSoft.MvvmLight.Messaging.Messenger.Default.Register(...)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-23
      • 1970-01-01
      • 2022-01-13
      相关资源
      最近更新 更多