工作框架 |将信息从弹出子项 Window 发送到父项 Window

WPF | Send Info from Popup Child Window to Parent Window

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

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

C# - Return variable from child window to parent window in WPF

但我不明白这些委托是如何工作的..

我已经这样做了..

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

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

在构造函数的 Popup window 中,我有这样的代码。

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,因为我认为它是一个委托,必须有另一种方法来为其分配值并将其传递给父级 Window..

但我真的不确定如何使用这个委托以及写什么来给它赋值。

我遇到错误

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

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

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

selectedBeneID = beneId; 

selectedBeneID(beneId);

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




方案 B

以下解决方案不是最优雅的,但它始终有效:

给你的 Popup Window 一个 public 属性 (selectedBeneID)。

public partial class AddBeneficiaryPopup : Window   {
    public string selectedBeneID;
.....
  }
}

在您的 cmbRefBene_SelectionChanged 函数中设置此 属性。


主要Window:

更改 addBen.Show(); 在您的 Main Window

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


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

之后,您可以访问 属性 弹出窗口 Window 并读出它。