从WPF中的窗口传回值

时间:2013-12-19 18:29:26

标签: c# wpf

我有一个WPF应用程序。

每当按下按钮时,我都会创建一个新窗口:

MyWindow myWin = new MyWindow();
myWin.Show();

然后在MyWindow的构造函数中,我将其父级设置为主应用程序,如下所示:

  public MyWindow ()
  {
     InitializeComponent();

     this.Owner = App.Current.MainWindow;
   }

这使得窗口不会显示为单独的窗口并保持在我的应用程序前面。

现在我想在MyWindow关闭时从MyWindow传回一个参数。我该怎么做呢?像这样:

string myValue = myWin.Value.

这可以在WPF中完成吗?

3 个答案:

答案 0 :(得分:2)

使用此

更改您的代码
MyWindow myWin = new MyWindow();
 myWin.ShowDialog();

答案 1 :(得分:2)

不需要WPF特定的解决方案......真的,你有一个class可以拥有原始类可以访问的public property

现在,如果您想要一个“花哨”的解决方案......您可以拥有TPL解决方案(假设您使用的是.NET 4.5)。

您可以执行类似

的操作
public class MyWindow
{
  private TaskCompletionSource<String> _tcs = new TaskCompletionSource<String>();

  public Task<String> Fetch()
  {
    return _tcs.Task;
  }

  public void handleButtonClick(object sender, EventArgs e)
  {
    _tcs.SetResult("some value");
  }
}

...

var window = new MyWindow();
window.Show();

var value = await window.Fetch()

答案 2 :(得分:1)

这样做

    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; }
    }

}