如何从WPF中的子窗口获取数据

本文关键字:窗口 获取 数据 WPF | 更新日期: 2023-09-27 18:25:14

我有一个WPF应用程序,在那里我创建了一个表示自定义消息框的新窗口。它有两个按钮——是和否。

我从Parent表单调用它,并期望收到答案,应该是"Yes""No",或者truefalse

我试图在这里做与Servy的asnwer相同的事情:C#-在WPF 中从子窗口返回变量到父窗口

但由于某些原因,我从未得到更新的值,所以isAllowed总是false。

这是我的父窗口中的代码:

bool isAllowed = false;
ChildMessageBox cmb = new ChildMessageBox();
cmb.Owner = this;
cmb.Allowed += value => isAllowed = value;
cmb.ShowDialog();
if (isAllowed) // it is always false
{
    // do something here
}

然后在"儿童"窗口中,我有:

public event Action<bool> Allowed;
public ChildMessageBox()
{
     InitializeComponent();
}
private void no_button_Click(object sender, RoutedEventArgs e)
{
     Allowed(false);
     this.Close();
}
private void yes_button_Click(object sender, RoutedEventArgs e)
{
     Allowed(true); // This is called when the Yes button is pressed
     this.Close();
}

如何从WPF中的子窗口获取数据

在按钮点击事件处理程序中,首先需要设置DialogResult属性。像这样:

private void no_button_Click(object sender, RoutedEventArgs e)
{
    DialogResult = false;
    Close();
}
//Do the same for the yes button (set DialogResult to true)
...

这将从ShowDialog方法返回,您可以简单地将isAllowed变量分配给ShowDialog的结果。

bool? isAllowed = false;
...
isAllowed = cmb.ShowDialog();
if (isAllowed == true)
{
    ...