WPF BackgroundWorker已完成从sub usercontrol到MainWindow的更新
我的主窗口中有一个动态加载的WPF BackgroundWorker已完成从sub usercontrol到MainWindow的更新,wpf,Wpf,我的主窗口中有一个动态加载的UserControl。此用户控件通过调用BackgroundWorker执行任务。完成后,我必须通知主窗口。当worker完成时,它在内部usercontrol中进入workercompleted函数,但是如何让外部用户控件知道这一点 在我的例子中,当工人启动时,我禁用了一个按钮。我必须在工作程序完成时启用它,但不知道如何传播该事件。因此,当BackgroundWorker完成时,您会引发另一个UserControl级别的事件,然后您可以在主窗口中观察到 e、 g
UserControl
。此用户控件通过调用BackgroundWorker
执行任务。完成后,我必须通知主窗口。当worker完成时,它在内部usercontrol中进入workercompleted函数,但是如何让外部用户控件知道这一点
在我的例子中,当工人启动时,我禁用了一个按钮。我必须在工作程序完成时启用它,但不知道如何传播该事件。因此,当BackgroundWorker完成时,您会引发另一个UserControl级别的事件,然后您可以在主窗口中观察到 e、 g 然后您可以使用:
MyUserControl.BackgroundWorkerCompleted += delegate { EnableButton(); };
在您的窗口中。您可以使用它。然后引发一个路由事件,它将在可视化树中冒泡,并可以在父UI元素(如窗口)中处理
在用户控件中,定义如下所示的路由事件:
public static readonly RoutedEvent OperationCompletedEvent = EventManager.RegisterRoutedEvent(
"OperationCompleted", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(MyUserControl));
public event RoutedEventHandler OperationCompleted
{
add { AddHandler(OperationCompletedEvent, value); }
remove { RemoveHandler(OperationCompletedEvent, value); }
}
后台工作程序操作完成后,使用用户控件上的RaiseEvent
方法引发该事件:
protected virtual OnOperationCompleted() {
RaiseEvent(new RoutedEventArgs(OperationCompletedEvent));
}
然后,在您的窗口中订阅此活动:
AddHandler(MyUserControl.OperationCompletedEvent, OnUserControlOperationCompleted);
你能给我举个这样做的例子吗
AddHandler(MyUserControl.OperationCompletedEvent, OnUserControlOperationCompleted);