Доступ к MainWindow из другого окна - PullRequest
0 голосов
/ 30 апреля 2011

Я создал новое окно, которое открывается из главного окна. После нажатия кнопки в этом окне окно должно закрыться и одновременно вызвать какое-то событие в MainWindow.

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

Любая помощь будет оценена. Спасибо! :)

Ответы [ 4 ]

1 голос
/ 30 апреля 2011

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

0 голосов
/ 30 апреля 2011

Это довольно просто, так как вы хотите, чтобы действие в MainWindow запускалось при закрытии дочернего окна, просто зарегистрируйте событие закрытия:

// In the main window, whenever your start your child window (not in the constructor)
private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        var window = new Window();
        window.Closed += new EventHandler(window_Closed);
        window.ShowDialog();
    }

    void window_Closed(object sender, EventArgs e)
    {
        throw new NotImplementedException();
    }

Тогда будет вызвана функция window_Closed в главном окнекогда дочернее окно закрыто.

0 голосов
/ 30 апреля 2011

Вам не нужно делать это таким образом ...

определить в дочернем окне событие, подобное:

public event EventHandler Closing;

при создании этого окна в главном окне подписывайтесь на него:

Window1 wnd = new Window1();

wnd.Closing += new EventHandler(childClosing);

при закрытии дочернего окна проверить, подписано ли событие и вызвать его:

if (Closing != null) {
  Closing(this, new EventArgs());
}

конечно, вам нужен метод childClosing в главном окне:

private void childClosing(object sender, EvenrArgs e) {
  /// do your work
}

Если вам нужно передать некоторые данные обратно, вы создаете класс, производный от EvenrArgs, и используете его вместо этого. Но вам нужен делегат, отличный от Eventhandler, например:

class ClosingArgs : EventArgs {
   // some property here
}

в дочернем окне

delegate void ClosingEventHandler(object sender, ClosingArgs e);

и

public event ClosingEventHandler Closing;

ура!

0 голосов
/ 30 апреля 2011

Использование Application.MainWindow свойство

...