public AfterViewModelEventRaisedArgs( IViewModelEvent @event, ViewModelEventRoutingStrategy routingStrategy) { this.Event = @event; this.RoutingStrategy = routingStrategy; }
public ViewModelEventArgs( IViewModel sender, IViewModelEvent @event, ViewModelEventRoutingStrategy routingStrategy) { this.Sender = sender; this.Event = @event; this.RoutingStrategy = routingStrategy; }
void OnAfterViewModelEventRaised( IViewModel viewModel, IViewModelEvent ev, ViewModelEventRoutingStrategy routingStrategy) { RaiseViewModelEvent(viewModel, ev, routingStrategy); }
void RaiseViewModelEvent(IViewModel vm, IViewModelEvent ev, ViewModelEventRoutingStrategy routingStrategy) { if (routingStrategy.HasFlag(ViewModelEventRoutingStrategy.Bubble)) { var preview_args = new ViewModelEventArgs(vm, ev, ViewModelEventRoutingStrategy.Bubble); // Raise Bubbling WPF Routed Event var wpf_preview_args = new ViewModelEventRoutedEventArgs(preview_args, PreviewViewModelEventProperty, this); RaiseEvent(wpf_preview_args); if (wpf_preview_args.Handled || preview_args.IsHandled) return; } if (routingStrategy.HasFlag(ViewModelEventRoutingStrategy.Tunnel)) { var args = new ViewModelEventArgs(vm, ev, ViewModelEventRoutingStrategy.Tunnel); // Raise Tunneling WPF Routed Event var wpf_args = new ViewModelEventRoutedEventArgs(args, ViewModelEventProperty, this); RaiseEvent(wpf_args); if (wpf_args.Handled || args.IsHandled) return; } if(routingStrategy.HasFlag(ViewModelEventRoutingStrategy.BroadcastToChildren)) { // search visual tree for children deriving from View var children = this.VisualTreeTraversal( includeChildItemsControls: true, traversalMode: TreeTraversalMode.BreadthFirst) .OfType<View>(); var args = new ViewModelEventArgs(vm, ev, ViewModelEventRoutingStrategy.BroadcastToChildren); foreach (var v in children) { v.OnViewModelEventInternal(args); if (args.IsHandled) return; } } }