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>"
解决方案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;
现在程序将等待,直到您关闭弹出窗口。
之后你可以访问你的弹出窗口的属性并读出它