static void CreateAndRaiseNewEventArgs(object sender, ViewModelEventRoutedEventArgs e)
        {
            var v = sender as View;

            var target = GetTarget(v);

            var new_e2 = new ViewModelEventRoutedEventArgs(e.ViewModelEventArgs, e.RoutedEvent, e.Source);

            target.RaiseEvent(new_e2);

            if (new_e2.Handled)
                e.Handled = true;
        }
Beispiel #2
0
 void View_ViewModelMessage(object sender, ViewModelEventRoutedEventArgs args)
 {
     OnViewModelEventInternal(args);
 }
Beispiel #3
0
        void OnViewModelEventInternal(ViewModelEventRoutedEventArgs args)
        {
            if (ViewModel == null)
                return;

            if (args.RoutedEvent.RoutingStrategy == RoutingStrategy.Bubble)
            {
                // todo: update interface
                (ViewModel as ViewModel).OnPreviewViewModelEventInternal(args.ViewModelEventArgs);
                return;
            }

            if (args.RoutedEvent.RoutingStrategy == RoutingStrategy.Tunnel)
            {
                // todo: update interface
                (ViewModel as ViewModel).OnViewModelEventInternal(args.ViewModelEventArgs);
                return;
            }
        }
Beispiel #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;
                }
            }
        }
 static void Source_ViewModelEvent(object sender, ViewModelEventRoutedEventArgs e)
 {
     CreateAndRaiseNewEventArgs(sender, e);
 }