2012-01-17 139 views

回答

15

你可以做的是在打開第二個窗口之前,將主窗口指定爲其所有者,然後從模態窗口調用Owner屬性,將其轉換爲MainWindow對象,然後您就可以執行該方法。

// Code in main window 
ModalWindow window = new ModalWindow(); 
window.Owner = this; 
window.ShowDialog() 

//Code on the modal window 
var myObject = this.Owner as MainWindow; 
myObject.MyMethod(); // Call your method here. 
+0

之前從父傳遞信息模式,然後將它傳遞到構造函數或公共屬性我得到這個:「不能所有者屬性設置爲尚未所示的窗口先前」。看起來window.Owner不能在ShowDialog之前... – pzogr

2

有很多方法可以做到這一點。

您可以重載模態窗口的構造函數,以便您可以傳入對該函數或主窗口的引用。或者,將屬性添加到該窗口。

您還可以在顯示模態窗口的主窗口代碼的下一行中啓動計時器。

2
  • 如果這個示範窗口將從MainWindow打開,這樣讓我們說

    modalWindow.ShowDialog()

    這是不夠的只是這個調用後添加代碼,它會之後的執行模態窗口關閉。

  • 如果模態窗口打開的形式在其他地方,但在收盤應該運行在complitely無關的部分代碼,可以使用,例如,CommandsRelayCommand(一種直接委託調用的)。

希望這會有所幫助。

0

您可以將事件處理程序附加到模式對話框的「關閉」事件,該對話框在對話框觸發此事件時將在主程序中執行。

5
public class ModalWindow : Window 
{ 
    private MainWindow _parent; 
    public ModalWindow(MainWindow parent) 
    { 
     _parent = parent; 
     Owner = parent; 
    } 

    void CallParent() 
    { 
     _parent.Call(); 
    } 
} 

我建議這種模式是代碼味道。

如果您的目標是將信息從模態傳遞給父模型,最好暴露模態窗口上的屬性,並在關閉後讀取這些值並執行父代中必需的操作。

如果你的目標是要調用ShowDialog().