从弹出窗口返回一个对象

时间:2010-08-12 13:56:48

标签: c# wpf

我有一个弹出另一个窗口的窗口。我希望第二个窗口能够在按下按钮时将对象返回到第一个窗口。我该怎么做?

6 个答案:

答案 0 :(得分:51)

您可以在第二个窗口中公开属性,以便第一个窗口可以检索它。

public class Window1 : Window
{
    ...

    private void btnPromptFoo_Click(object sender, RoutedEventArgs e)
    {
        var w = new Window2();
        if (w.ShowDialog() == true)
        {
            string foo = w.Foo;
            ...
        }
    }
}

public class Window2 : Window
{
    ...

    public string Foo
    {
        get { return txtFoo.Text; }
    }

}

答案 1 :(得分:20)

如果您不想公开某个属性,并且希望更明确地使用该属性,则可以重载ShowDialog

public DialogResult ShowDialog(out MyObject result)
{
   DialogResult dr = ShowDialog();
   result = (dr == DialogResult.Cancel) 
      ? null 
      : MyObjectInstance;
   return dr;
}

答案 2 :(得分:1)

火星的圣母,这让我永远想通了:

WINDOW 1:

<uap3:AppExtension Name="randomname" Id="randomname" PublicFolder="Extension" DisplayName="randomname">

WINDOW 2:

if ((bool)window.ShowDialog() == true)
{
   Window2 content = window.Content as Window2;
   string result = content.result;
   int i = 0;
}

XAML:

public partial class Window2 : UserControl
{
    public string result
    {
        get { return resultTextBox.Text; }
    }

    public Window2()
    {
        InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        Window.GetWindow(this).DialogResult = true;
        Window.GetWindow(this).Close();
    }
}

答案 3 :(得分:0)

我知道这是一个旧的,但我正在为我正在研究的WPF应用程序寻找相同的信息。我发现这个网站非常有帮助:

http://www.dreamincode.net/forums/topic/206458-the-right-way-to-get-values-from-form1-to-form2/

这是为Windows Forms编写的,但是如果忽略了将值传递给新窗口的部分,它仍然可以工作并且有一些非常好的信息。

另一方面,要将值传递给新窗口,这确实很有帮助:

WPF passing string to new window

答案 4 :(得分:0)

我是那样做的。

在父窗口中,像这样创建一个相应的ClosingEvent:

private void NewWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
        NewWindow nw = (NewWindow)sender;

        object Receiver = nw.Sender;
    }

...并在子窗口中更改代码,以实现“发送方”,如下所示:

    public partial class NewWindow : Window
{
    public object Sender { get; set; }

    public NewWindow()
    {
        InitializeComponent();

        Sender = objectYouWantToSend;
    }
}

因此,当您在子窗口中将数据放入对象“ Sender”中时,关闭此窗口时会将数据放入“ Receiver”变量中。

我希望这会有所帮助。

答案 5 :(得分:0)

您可以像这样简单地调用弹出窗口的任何方法:

int value = 0;
if ((bool)poupWindow.ShowDialog() == true) {
  value = poupWindow.GetValue();
}