工作框架 |将信息从弹出子项 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 并读出它。
我有这个 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 并读出它。