如何从模式窗口调用 WPF页面的方法?
当我使用以下代码时,在 window.Owner = this;
无法将类型'MyApplication1.Pages.Page1'隐式转换为 'System.Windows.Window'
我的代码:
// 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 :(得分:0)
最好从模态窗口中引发一个事件,这样它就不会紧密耦合,您可以将模态窗口重用于其他目的。
例如,一个显示模式对话框的MainWindow。
public class MainWindow : Window
{
public void ShowMyDialog()
{
// create the modal dialog
ModalWindow window = new ModalWindow();
// bind the event
window.OnCallMyMethod += MyMethod;
// show dialog
window.ShowDialog();
}
private void MyMehod(object sender, EventArgs e)
{
// insert code here that should be triggered by the dialog.
}
}
public class ModalWindow : Window
{
// declaration of event
public event EventHandler OnCallMyMethod;
// for example: when a button is clicked, it should trigger the event.
public void Button1_Click(object sender, EventArgs e)
{
// raise the event.
OnCallMyMethod?.Invoke(this, EventArgs.Empty);
}
}
这种方式的模式对话框不依赖于MainWindow。也许您应该根据需要更改定义。
要记住的事情是,如果存在父(mainWindow)和子(modalWindow)。父母知道孩子有什么方法/事件,但孩子不知道父母是谁。因此,他应该通过自己的事件与父母进行沟通。
注意:OnCallMyMethod不能很好地说明其功能或应执行的操作。