如何将打开的窗口中的数据发送回WPF中的opener

在WPF中,我有一个窗口打开第二个窗口,允许进行一些数据选择。 一旦做出选择,我就想要提交/关闭第二/子窗口并将数据推回到开始/父窗口。

我可以通过公共属性将数据从父级推送到子窗口,但还没有找到如何以其他方式将其恢复。 有人可以帮忙吗?

我用来打开窗口并设置一些属性的代码如下:

Dim wdwContacts As New appContacts() wdwContacts.selClientID = selClientID wdwContacts.selEmailToCCType = selEmailToCCType wdwContacts.pullToAddresses = txEmailTo.Text wdwContacts.pullCCAddresses = txEmailCC.Text wdwContacts.Owner = Me wdwContacts.WindowStartupLocation = Windows.WindowStartupLocation.CenterOwner wdwContacts.Show() 

基础是我将第一个窗口作为电子邮件撰写页面,其中包含一个按钮,单击该按钮会显示电子邮件联系人列表。 它从第一个窗口中引入任何先前选择的电子邮件地址,并在子窗口/电子邮件列表中自动选择它们。 如果在电子邮件列表上进行了进一步选择,则当op单击完成/提交/关闭按钮时,它会将新选择列表推回到第一个/父窗口上的相关TextBox中。

谢谢

您可以在appContacts类中设置属性,然后处理窗口的Close事件并在opener窗口中读取这些属性。

我建议您在appContacts中定义一个事件,然后您可以从您的调用类订阅。 然后,事件将在您的对话框的EventArgs中得到结果。

这可以节省您在调用类中检查“通过OK而不是取消”的检查。

在Code中,它看起来像这样:首先创建EventArgs类,它将封装窗口中的返回数据:

 public class WindowEventArgs : EventArgs { private readonly string username; private readonly string password; public string Username { get; private set; } public string Password { get; private set; } public WindowEventArgs(string username, string password) { this.username = username; this.password = password; } } 

然后,在SubWindow上定义一个事件,并创建一个方法来调用该事件,如果有事件订阅者(如果有任何构造EventArgs类并将其传递给事件):

 public class SubWindow { public event EventHandler DialogFinished; public void OnDialogFinished() { if (DialogFinished != null) DialogFinished(this, new WindowEventArgs("some username", "some password")); } } 

在您的父窗口中,您现在可以在打开窗口时简单地连接到事件处理程序:

 public void OpenSubWindow() { var subWindow = new SubWindow(); subWindow.DialogFinished += new EventHandler(subWindow_DialogFinished); } void subWindow_DialogFinished(object sender, WindowEventArgs e) { //Do Something with the results you get from e.Username & e.Password } 

我显然在纯C#类中做到了这一点,所以在现实世界的WPF应用程序中,Subwindow会成为Frame的孩子或其他东西,但我希望它能说明我想要做的事情。 现在,只需要在子窗口中调用OnDialogFinished方法, OnDialogFinished数据传回并关闭窗口即可。