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

时间:2015-08-07 11:37:49

标签: c# wpf popup

我有这个WPF应用程序,我正在尝试弹出窗口。井窗口创建并正常工作,但我想做什么。如果我按下弹出窗口中的确定/更新按钮,应该将选定的值传递给父窗口,并且应该关闭该弹出窗口。

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

C# - Return variable from child window to parent window in 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,因为我认为它的委托必须有另一种方法来为它分配值并将其传递给父窗口..

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

我收到错误

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

1 个答案:

答案 0 :(得分:1)

解决方案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;

现在程序将一直等到你关闭弹出窗口。

之后,您可以访问弹出窗口的属性并将其读出。