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