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;
 }
Example #3
0
 void OnAfterViewModelEventRaised(
     IViewModel viewModel,
     IViewModelEvent ev,
     ViewModelEventRoutingStrategy routingStrategy)
 {
     RaiseViewModelEvent(viewModel, ev, routingStrategy);
 }
Example #4
0
        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;
                }
            }
        }