在两个WPF窗口之间发送事件
本文关键字:之间 窗口 事件 WPF 两个 | 更新日期: 2023-09-27 18:12:39
我有两个WPF窗口。一个是主窗口,另一个是配置窗口。我希望配置窗口发送和事件到主窗口。知道我该怎么做吗?
下面是我创建和打开配置窗口的方法:
private void MenuItem_Click(object sender, RoutedEventArgs e)
{
ConfigPage Confwin= new ConfigPage();
Confwin.Owner = this;
Confwin.Show();
}
您可以在子窗口类中定义任何事件,并在显示窗口之前订阅它。
主窗口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();
}
}
您应该使用弱事件模式。如果你使用Prism或MVVMLight,它是内置的。
否则,你必须自己实现它:msdn
这样做的原因是它将配置窗口与主窗口解耦。
它们不应该知道彼此,这样配置窗口是可重用的(并且应用程序中任何活动的对象也可以侦听事件)。