/// <summary> /// occurs when the command change on a <see cref="DependencyObject"/> /// </summary> /// <param name="d">The dependency object.</param> /// <param name="e">The <see cref="System.Windows.DependencyPropertyChangedEventArgs"/> instance containing the event data.</param> private static void CommandChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (d is UIElement) { var elem = (UIElement)d; CommandSubscription.UnregisterSubscription(e.OldValue as string, elem); CommandSubscription.RegisterCommand(e.NewValue as string, elem); } }
/// <summary> /// Registers the command. /// </summary> /// <param name="commandName">The command name.</param> /// <param name="element">The element.</param> internal static void RegisterCommand(string commandName, UIElement element) { var subscription = new CommandSubscription(element, commandName); Dictionary <string, CommandSubscription> elementSubscriptions; if (!subscriptions.TryGetValue(element, out elementSubscriptions)) { elementSubscriptions = new Dictionary <string, CommandSubscription>(); subscriptions.Add(element, elementSubscriptions); } Command cmd = CommandService.FindCommand(commandName); if (cmd != null) { if (element is ButtonBase) { ((ButtonBase)element).Click += subscription.CommandService_Click; } else if (element is TextBox) { (element).KeyDown += subscription.CommandService_KeyDown; } else { element.MouseLeftButtonUp += subscription.CommandService_Click; } var fe = element as FrameworkElement; if (fe != null) { fe.LayoutUpdated += subscription.LayoutUpdated; } } elementSubscriptions[commandName] = subscription; }