如何从模态窗口在WPF页面上调用方法?

时间:2019-06-09 09:36:59

标签: c# wpf

如何从模式窗口调用 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.

1 个答案:

答案 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不能很好地说明其功能或应执行的操作。