WPF |从弹出子窗口发送信息到父窗口

本文关键字:窗口 信息 WPF | 更新日期: 2023-09-27 18:06:46

我有这个WPF应用程序,我试图使弹出窗口。窗口创建好了,工作正常,但是我想做的是。如果我在弹出窗口中按下OK/Update按钮,所选择的值应该传递给父窗口,并且该弹出窗口应该关闭。

我在这里看到了这个问题的解决方案。

c# -在WPF中从子窗口返回变量到父窗口

但是我不明白这个委托是如何工作的。

我曾经这样做过……

当点击按钮时,此方法将打开弹出窗口。

private void btnAddBeneficiaryPopup_Click(object sender, RoutedEventArgs e)
{
    try
    {
        AddBeneficiaryPopup addBen = new AddBeneficiaryPopup(refCustId);
        addBen.selectedBeneID += value => selectedBeneficiaryID = value;
        addBen.Show();
    }
    catch (Exception ex)
    { this.MyErrorMessage(ex); }
}

在构造函数的弹出窗口中,我有这样的代码:

public AddBeneficiaryPopup(int id)
{
    InitializeComponent();
    refCustId = id;
    this.LoadReferenceBeneficiary();
}

现在这个下面的方法我正在工作,想要改变它…

private void cmbRefBene_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    string beneId = null;
    if (cmbRefBene.SelectedIndex >= 0)
    {
        try
        {
            beneId = ((DataRowView)cmbRefBene.SelectedItem).Row.ItemArray[0].ToString();
            selectedBeneID = beneId;
            bene.OpenConnection(str);
            SqlDataReader reader = bene.LookUpSingleBene(int.Parse(beneId));
            if (reader.Read())
            {
                tbName.Text = reader["Name"].ToString();
                tbContactNo.Text = reader["ContactNo"].ToString();
                btnUpdate.IsEnabled = true;
            }
            reader.Close();
            bene.CloseConnnection();
        }
        catch (Exception ex)
        {
            MyErrorMessage(ex);
        }
        finally
        {
            bene.CloseConnnection();
        }
    }
}

在上面的代码selectedBeneID = beneId;中可以看到,这个beneId给出了错误。当我试图分配它selectedBeneID,因为我认为它是一个委托,必须有另一种方式来分配值给它,并将其传递给父窗口。

但是我真的不知道如何使用这个委托和写什么来赋值给它。

i am error

"cannot implicitly convert type string to "System.Action<string>"

WPF |从弹出子窗口发送信息到父窗口

解决方案A(让你的一个工作)

要使您的解决方案运行,请更改cmbRefBene_SelectionChanged函数中的以下行:

selectedBeneID = beneId; 

selectedBeneID(beneId);

现在您应该不会得到错误消息,并且值应该设置正确。




解决方案B

下面的解决方案不是最优雅的,但它总是有效的:

给你的弹出窗口一个公共属性(selectedBeneID)。
public partial class AddBeneficiaryPopup : Window   {
    public string selectedBeneID;
.....
  }
}

cmbRefBene_SelectionChanged函数中设置此属性。


主窗口:

更改主窗口的addBen.Show();

addBen.ShowDialog(); idreturned = addBen.selectedBeneID;


现在程序将等待,直到您关闭弹出窗口。

之后你可以访问你的弹出窗口的属性并读出它