//tries to get a CommandBehaviorBinding from the element. Creates a new instance if there is not one attached private static CommandBehaviorBinding FetchOrCreateBinding(DependencyObject d) { CommandBehaviorBinding binding = CommandBehavior.GetBehavior(d); if (binding == null) { binding = new CommandBehaviorBinding(); CommandBehavior.SetBehavior(d, binding); } return(binding); }
/// <summary> /// Handles changes to the Event property. /// </summary> private static void OnEventChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { CommandBehaviorBinding binding = FetchOrCreateBinding(d); //check if the Event is set. If yes we need to rebind the Command to the new event and unregister the old one if (binding.Event != null && binding.Owner != null) { binding.Dispose(); } //bind the new event to the command binding.BindEvent(d, e.NewValue.ToString()); }
/// <summary> /// Handles changes to the Command property. /// </summary> private static void OnCommandChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { CommandBehaviorBinding binding = FetchOrCreateBinding(d); binding.Command = (ICommand)e.NewValue; }
/// <summary> /// Sets the Behavior property. /// </summary> private static void SetBehavior(DependencyObject d, CommandBehaviorBinding value) { d.SetValue(BehaviorProperty, value); }
/// <summary> /// Handles changes to the Action property. /// </summary> private static void OnActionChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { CommandBehaviorBinding binding = FetchOrCreateBinding(d); binding.Action = (Action <object>)e.NewValue; }