Ejemplo n.º 1
0
        /// <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)));
        }