/// <summary> /// Gets an observable for a <see cref="RoutedEvent{TEventArgs}"/>. /// </summary> /// <param name="o">The object to listen for events on.</param> /// <param name="routedEvent">The routed event.</param> /// <param name="routes">The routing strategies to listen to.</param> /// <param name="handledEventsToo">Whether handled events should also be listened for.</param> /// <returns> /// An observable which fires each time the event is raised. /// </returns> public static IObservable <TEventArgs> GetObservable <TEventArgs>( this IInteractive o, RoutedEvent <TEventArgs> routedEvent, RoutingStrategies routes = RoutingStrategies.Direct | RoutingStrategies.Bubble, bool handledEventsToo = false) where TEventArgs : RoutedEventArgs { o = o ?? throw new ArgumentNullException(nameof(o)); routedEvent = routedEvent ?? throw new ArgumentNullException(nameof(routedEvent)); return(Observable.Create <TEventArgs>(x => o.AddDisposableHandler( routedEvent, (_, e) => x.OnNext(e), routes, handledEventsToo))); }