Отправка события между двумя окнами WPF - PullRequest
7 голосов
/ 26 октября 2011

У меня есть два окна WPF.Одним из них является главное окно, а другим - окно конфигурации.Я хотел бы, чтобы окно конфигурации отправлялось и событие в главное окно.Любая идея, как мне это сделать?

Вот как я создаю и открываю окно конфигурации:

 private void MenuItem_Click(object sender, RoutedEventArgs e)
    {
        ConfigPage Confwin= new ConfigPage();
        Confwin.Owner = this;
        Confwin.Show();
    }

Ответы [ 2 ]

18 голосов
/ 26 октября 2011

Вы можете определить любое событие в своем классе дочернего окна и подписаться на него перед отображением окна.

Главное окно

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        this.Loaded += new RoutedEventHandler(MainWindow_Loaded);
    }

    void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        Child childWindow = new Child();
        childWindow.MyEvent += new EventHandler(childWindow_MyEvent);

        childWindow.ShowDialog();
    }

    void childWindow_MyEvent(object sender, EventArgs e)
    {
        // handle event
        MessageBox.Show("Handle");
    }
}

Дочернее окно

public partial class Child : Window
{
    // define event
    public event EventHandler MyEvent;

    protected void OnMyEvent()
    {
        if (this.MyEvent != null)
            this.MyEvent(this, EventArgs.Empty);
    }

    public Child()
    {
        InitializeComponent();

        this.Loaded += new RoutedEventHandler(Child_Loaded);
    }

    void Child_Loaded(object sender, RoutedEventArgs e)
    {
        // call event
        this.OnMyEvent();
    }
}
2 голосов
/ 26 октября 2011

Вы должны использовать шаблон Weak Event. Он встроен, если вы используете Prism или MVVMLight .

В противном случае вам придется реализовать это самостоятельно: msdn

Причина этого заключается в том, что он отделяет окно конфигурации от главного окна.
Они не должны знать друг о друге, чтобы окно конфигурации можно было использовать повторно (и любой объект, существующий в вашем приложении, также может прослушивать событие).

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