2015-05-04 65 views
-2

我有一個用戶控件,它只包含一個文本框和保存按鈕。我將這個用戶控件顯示爲對話窗口。用戶在文本框中輸入註釋並單擊保存按鈕後,我正在關閉對話窗口。窗口關閉後的返回值WPF-MVVM

我成功地做到了這一點。我的問題是我想將文本框的值傳遞給主窗口。我怎麼能通過這個?這裏是我的代碼

//顯示使用的ICommand

private void SaveCommentExecute() 
    { 
     var window = Application.Current.Windows.OfType<Window>().SingleOrDefault(x => x.IsActive); 
     if (window != null) 
     { 
      window.Close(); 
     } 
     // get comments and pass back to main window 
    } 
+0

在這個主題上,有多種方法可以做到這一點,並且在互聯網上有多種資源。什麼讓你的案例特別? – walther

+0

@walther我還沒有看到用戶控件的示例 – Chatra

+1

提示:如果您認真對待MVVM,您需要一個對話服務。模型然後使用該服務來創建對話框並捕獲返回代碼以顯示它。 –

回答

0

您正在使用ShowDialog窗口

var window = new RadWindow 
      { 
       Owner = Application.Current.MainWindow, 
       WindowStartupLocation = WindowStartupLocation.CenterOwner 
      };   
     window.Content = control; 
     window.SizeToContent = true; 
     window.Header = header; 
     window.ShowDialog() 

關閉窗口在視圖模型,但不是的奇妙的功能有任何..

在顯示對話框的類中:

if (window.ShowDialog() && window.DialogResult.Value == true) 
{ 
    //Access the properties on the window that hold your data. 
} 

然後在對話框本身:

if (window != null) 
{ 
    this.DialogResult = true; 
    //Set the properties to the data you want to pass back. 
    window.Close(); 
} 
+0

在哪個視圖模型中我必須這樣做? – Chatra

+0

這是用於Windows窗體而不是WPF。它不回答OP的問題。 –

+0

@ThomasLevesque我修改了它的WPF,但不知道*什麼*數據需要保存,我不能推薦屬性添加到對話框。也許OP可以創建一個返回虛擬機的'DataContext'的屬性... –

0

只需通過在你的控制屬性暴露值:

public string TheValue 
{ 
    get { return theTextBox.Text; } 
} 

和讀取它,你顯示對話框:

window.ShowDialog(); 
string value = control.TheValue; 

(不確定爲什麼你標記了你的問題「MVVM」,因爲你發佈的代碼似乎沒有遵循MVVM模式)