2010-08-12 142 views
29

我有一个窗口弹出另一个窗口。我希望第二个窗口能够在按下按钮时将对象返回到第一个窗口。我将如何做到这一点?WPF窗口返回值

+0

是新的窗口模式的第一个窗口? – Robaticus 2010-08-12 14:00:36

+0

起初,我甚至都不知道模式窗口是什么,但我明白了。托马斯的代码在下面进行了轻微的修改。 – Reflux 2010-08-12 14:51:08

回答

43

您可以在第二窗口上暴露的属性,使得第一窗口可以找回。

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

这不起作用,因为用户与窗口交互并按下按钮,然后我希望父窗口获取值。 – Reflux 2010-08-12 14:39:45

+3

我明白了。问题是它应该是(w.ShowDialog()== false)。 – Reflux 2010-08-12 14:50:11

+0

@Reflux:你确定吗?当用户取消对话框时,ShowDialog返回false,所以你可能不想在这种情况下考虑这个值。 – 2010-08-12 14:53:42

17

如果你不希望暴露的属性,并且你想使用一点更加明确,你可以重载ShowDialog

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

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

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

这是Windows窗体写的,但如果你忽略了约值传递到新窗口的一部分,它仍然工作,有一些非常好的信息。

在一个侧面说明,将值传递给新的窗口,这是真正有用的:

WPF passing string to new window

+1

欢迎使用StackOverflow。尽管您提供的链接可能会有所帮助,但直接将主要内容放在您的文章上总是更好。这样,如果链接被破坏并且更易于使用和更有帮助,则您的答案不会变得无关紧要。所以我建议相应地编辑你的答案。最好的祝福 – YakovL 2017-09-15 17:12:43