|
|
@@ -4,7 +4,6 @@
|
|
|
using System;
|
|
|
using System.Reactive.Subjects;
|
|
|
using System.Reflection;
|
|
|
-using System.Runtime.ExceptionServices;
|
|
|
|
|
|
namespace Avalonia.Interactivity
|
|
|
{
|
|
|
@@ -18,8 +17,8 @@ namespace Avalonia.Interactivity
|
|
|
|
|
|
public class RoutedEvent
|
|
|
{
|
|
|
- private Subject<Tuple<object, RoutedEventArgs>> _raised = new Subject<Tuple<object, RoutedEventArgs>>();
|
|
|
- private Subject<RoutedEventArgs> _routeFinished = new Subject<RoutedEventArgs>();
|
|
|
+ private readonly Subject<(object, RoutedEventArgs)> _raised = new Subject<(object, RoutedEventArgs)>();
|
|
|
+ private readonly Subject<RoutedEventArgs> _routeFinished = new Subject<RoutedEventArgs>();
|
|
|
|
|
|
public RoutedEvent(
|
|
|
string name,
|
|
|
@@ -38,31 +37,15 @@ namespace Avalonia.Interactivity
|
|
|
RoutingStrategies = routingStrategies;
|
|
|
}
|
|
|
|
|
|
- public Type EventArgsType
|
|
|
- {
|
|
|
- get;
|
|
|
- private set;
|
|
|
- }
|
|
|
+ public Type EventArgsType { get; }
|
|
|
|
|
|
- public string Name
|
|
|
- {
|
|
|
- get;
|
|
|
- private set;
|
|
|
- }
|
|
|
+ public string Name { get; }
|
|
|
|
|
|
- public Type OwnerType
|
|
|
- {
|
|
|
- get;
|
|
|
- private set;
|
|
|
- }
|
|
|
+ public Type OwnerType { get; }
|
|
|
|
|
|
- public RoutingStrategies RoutingStrategies
|
|
|
- {
|
|
|
- get;
|
|
|
- private set;
|
|
|
- }
|
|
|
+ public RoutingStrategies RoutingStrategies { get; }
|
|
|
|
|
|
- public IObservable<Tuple<object, RoutedEventArgs>> Raised => _raised;
|
|
|
+ public IObservable<(object, RoutedEventArgs)> Raised => _raised;
|
|
|
public IObservable<RoutedEventArgs> RouteFinished => _routeFinished;
|
|
|
|
|
|
public static RoutedEvent<TEventArgs> Register<TOwner, TEventArgs>(
|
|
|
@@ -98,29 +81,20 @@ namespace Avalonia.Interactivity
|
|
|
{
|
|
|
return Raised.Subscribe(args =>
|
|
|
{
|
|
|
- var sender = args.Item1;
|
|
|
- var e = args.Item2;
|
|
|
+ (object sender, RoutedEventArgs e) = args;
|
|
|
|
|
|
- if (targetType.GetTypeInfo().IsAssignableFrom(sender.GetType().GetTypeInfo()) &&
|
|
|
- ((e.Route == RoutingStrategies.Direct) || (e.Route & routes) != 0) &&
|
|
|
+ if (targetType.IsInstanceOfType(sender) &&
|
|
|
+ (e.Route == RoutingStrategies.Direct || (e.Route & routes) != 0) &&
|
|
|
(!e.Handled || handledEventsToo))
|
|
|
{
|
|
|
- try
|
|
|
- {
|
|
|
- handler.DynamicInvoke(sender, e);
|
|
|
- }
|
|
|
- catch (TargetInvocationException ex)
|
|
|
- {
|
|
|
- // Unwrap the inner exception.
|
|
|
- ExceptionDispatchInfo.Capture(ex.InnerException).Throw();
|
|
|
- }
|
|
|
+ handler(sender, e);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
internal void InvokeRaised(object sender, RoutedEventArgs e)
|
|
|
{
|
|
|
- _raised.OnNext(Tuple.Create(sender, e));
|
|
|
+ _raised.OnNext((sender, e));
|
|
|
}
|
|
|
|
|
|
internal void InvokeRouteFinished(RoutedEventArgs e)
|