Вы можете использовать Routed Events для этого. Затем вы поднимаете перенаправленное событие, оно всплывает в визуальном дереве и может обрабатываться в родительских элементах пользовательского интерфейса (например, в вашем окне).
В вашем пользовательском элементе управления определите перенаправленное событие следующим образом:
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);