簡體   English   中英

WPF | 將信息從彈出子窗口發送到父窗口

[英]WPF | Send Info from Popup Child Window to Parent Window

我有這個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時,因為我認為它的委托必須有另一種向其分配值並將其傳遞給父窗口的方法。

但是,實際上不確定如何與該委托人一起工作以及如何寫賦值給它。

我遇到錯誤

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

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


現在,程序將等待,直到您關閉彈出窗口。

之后,您可以訪問彈出窗口的屬性並將其讀出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM