如何从模态窗口调用主WPF窗口的方法?
(事实上,当我关闭某个模型窗口时,我想启动MainWindow.xaml.cs的一些计时器。)
谢谢!
答案 0 :(得分: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.
答案 1 :(得分:5)
public class ModalWindow : Window
{
private MainWindow _parent;
public ModalWindow(MainWindow parent)
{
_parent = parent;
Owner = parent;
}
void CallParent()
{
_parent.Call();
}
}
我建议这种模式是代码味道。
如果您的目标是将信息从模态传递给父模式,最好在模态窗口上公开属性,并在关闭后读取这些值并执行父项中所需的任何操作。
如果您的目标是将信息从父级传递到模态,则在调用ShowDialog().
之前将其传递给构造函数或公共属性
答案 2 :(得分:2)
有很多方法可以做到这一点。
您可以重载模态窗口的构造函数,以便可以传入对该函数或主窗口的引用。或者,在该窗口中添加属性。
您还可以在主窗口代码中显示模态窗口的下一行启动计时器。
答案 3 :(得分:2)
如果此模型窗口将从MainWindow
打开,请注意
modalWindow.ShowDialog()
它足以在此调用之后添加代码,并且将在模式窗口关闭后执行。
如果模式窗口是从其他地方打开的,但在关闭时应该在完全不相关的部分上运行代码,可以使用,例如,Commands或RelayCommand(直接委托调用的种类) )。
希望这有帮助。
答案 4 :(得分:0)
您可以将事件处理程序附加到模式对话框的“Closing”事件,当对话框触发此事件时,该事件将在主程序中执行。