Как вызвать метод главного окна WPF из модального окна? - PullRequest
8 голосов
/ 17 января 2012

Как вызвать метод главного окна WPF из модального окна?

(На самом деле я хочу запустить таймер MainWindow.xaml.cs при закрытии окна модели).

Спасибо!

Ответы [ 5 ]

16 голосов
/ 17 января 2012

Что вы можете сделать, перед тем как открыть второе окно, назначьте главное окно его владельцем, затем из модального окна вызовите свойство 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.
5 голосов
/ 18 января 2012
public class ModalWindow : Window
{
    private MainWindow _parent;
    public ModalWindow(MainWindow parent)
    {
        _parent = parent;
        Owner = parent;
    }

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

Я бы предположил, что этот тип шаблона является запахом кода.

Если ваша цель - передать информацию от модального к родителю, лучше выставить свойства в модальном окне и, после его закрытия, прочитать эти значения и выполнить все необходимые действия в родительском окне.

Если ваша цель состоит в том, чтобы передать информацию от родителя модальному, то передайте ее в конструктор или открытые свойства перед вызовом ShowDialog().

2 голосов
/ 17 января 2012
  • Если окно этой модели откроется из MainWindow, например, скажем

    modalWindow.ShowDialog()

    достаточно просто добавить код после этого вызоваи он будет выполнен после закрытия модального окна.

  • Если модальное окно открывается в другом месте, но при закрытии должен запускать код на совершенно не связанной части, можно использовать, например, Команды или RelayCommand (вид прямого вызова делегата).

Надеюсь, это поможет.

2 голосов
/ 17 января 2012

Есть много способов сделать это.

Вы можете перегрузить конструктор модального окна, так что вы можете передать ссылку на эту функцию или главное окно. Или добавьте свойство в это окно.

Вы также можете запустить таймер на следующей строке в коде главного окна, которое показывает модальное окно.

0 голосов
/ 18 января 2012

Вы можете прикрепить обработчик события к событию «Закрытие» модального диалога, который будет выполняться в основной программе, когда диалог запускает это событие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...