WPF:使用EventHandler事件实现窗口间的传值

13 篇文章 2 订阅

1、测试方法

  • 主窗口,有一个按钮和内容输入框,点击按钮,将打开一个子窗口,同时将输入框的内容传到子窗口的输入框;
    在这里插入图片描述

  • 子窗口修改传进来的值,点击按钮,关闭子窗口,并且主窗口收到修改后的值。
    在这里插入图片描述

2、实现方法

使用EventHandler。子窗口发布值修改事件,主窗口订阅值修改事件。关闭子窗口的时候,执行引发(Raise)该事件。

主窗口

View

<TextBox Name="textBox1" Width="200" Height="50" Margin="20"/>
<Button Width="100"
        Height="50"
        Margin="20"
        Content="传值到子窗口"
        Click="Button_Click"/>

后台代码

private void Button_Click(object sender, RoutedEventArgs e)
{
    TestDialog dialog = new TestDialog(textBox1.Text);
    // 订阅子窗口的文本改变事件
    dialog.TextChangedEventHandler += Dialog_TextChangedEventHandler;
    dialog.ShowDialog();
}

private void Dialog_TextChangedEventHandler(object sender, string e)
{
    // 获取子窗口返回的值
    textBox1.Text = e;
}

子窗口

View

 <TextBox Name="textBox1" Width="200" Height="50" Margin="20"/>
 <Button Width="100"  
         Height="30" 
         Content="返回值到主窗口" 
         Margin="20" 
         Click="Button_Click"/>

后台代码

 /// <summary>
 /// 文本更改事件
 /// </summary>
 public event EventHandler<string> TextChangedEventHandler;
 private void RaiseTextChangedEvent(string text)
 {
     TextChangedEventHandler?.Invoke(this, text);
 }

 public TestDialog()
 {
     InitializeComponent();
 }

 public TestDialog(string input) : this()
 {
     // 获取主窗口传来的值
     textBox1.Text = input;
 }

 private void Button_Click(object sender, RoutedEventArgs e)
 {
     // 发布文本更改事件
     RaiseTextChangedEvent(textBox1.Text);
     DialogResult = true;
 }

3、效果

在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值