2013-12-19 22 views
1

我有一個WPF應用程序。從WPF中的窗口傳回值

我創建像這樣,只要按下按鈕,一個新的窗口:

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

然後在mywindow的我其父設置在主應用程序,像這樣的構造:

public MyWindow() 
    { 
    InitializeComponent(); 

    this.Owner = App.Current.MainWindow; 
    } 

這使窗口不能作爲單獨的窗口出現,並保持在我的應用程序前面。

現在我想從mywindow的參數傳遞回來時,它關閉。我該怎麼做呢?就像這樣:

string myValue = myWin.Value. 

這可以在WPF中完成嗎?

+3

你確定你不應該僅僅採用'的ShowDialog()''而不是顯示()'?這將讓你使用窗口作爲對話框來獲取值,這聽起來更合適...... –

+0

謝謝你做了這個訣竅。 –

回答

2

變化與此

MyWindow myWin = new MyWindow(); 
myWin.ShowDialog(); 
+0

請記住......使用ShowDialog()時,它會阻塞其他窗口......所以,如果你有同時使用多個窗口的想法,這將不會工作得很好。 – Andrew

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

} 
+1

這個問題已經得到了回答,並且比你的回答更簡潔,無可否認這是正確的。 – LordWilmore