get the solution

Blog

Martin Martin
19.05.2009 17:44

AttachedCommands mit DelegateCommand und CommandParameter



AttachedCommands sind was ganz tolles. Man kann mit ihnen bestimmen, wann (bei welchem Event) ein Command ausgelöst wird. Die dazu passende Klasse hat Sacha Barber auf seinem Blog veröffentlich.

Leider hat er in seinem Beispiel die CommandParameter nicht implementiert. Auch arbeite ich lieber mit den DelegateCommands vom "patterns & practices: Composite WPF and Silverlight" Projekt.

Den CommandParameter kann man schnell in die Klasse von Sacha Barber implementiert, da sie sehr einfach gehalten ist. Die DelegateCommands muss man nur durch die ICommands ersetzten. Das wars schon.

Code mäßig sehen die Änderungen so aus:

        #region CommandParameter

        /// <summary>
        /// CommandParameter Attached Dependency Property
        /// </summary>
        public static readonly DependencyProperty CommandParameterProperty = DependencyProperty.RegisterAttached("CommandParameter", typeof(object), typeof(CommandBehavior),
                new FrameworkPropertyMetadata((object)null));

        /// <summary>
        /// Gets the CommandParameter property.  
        /// </summary>
        public static object GetCommandParameter(DependencyObject d)
        {
            return (object)d.GetValue(CommandParameterProperty);
        }

        /// <summary>
        /// Sets the CommandParameter property.
        /// </summary>
        public static void SetCommandParameter(DependencyObject d, object value)
        {
            d.SetValue(CommandParameterProperty, value);
        }

        #endregion

Hier wird der Parameter der Funktion .Execute(param) mit übergeben.

        /// <summary>
        /// Runs the DelegateCommand<object> when the requested RoutedEvent fires
        /// </summary>
        private void OnEventRaised(object sender, EventArgs e)
        {
            DelegateCommand<object> command = (DelegateCommand<object>)(sender as DependencyObject).GetValue(CommandBehavior.TheCommandToRunProperty);

            object param = (sender as DependencyObject).GetValue(CommandBehavior.CommandParameterProperty);

            if (command != null)
            {
                command.Execute(param);
            }
        }


Hier könnt ihr euch das Beispiel AttachedCommands.zip runterladen.





Schlüsselwörter: WPF
zuletzt geändert: 19. Mai 2009 18:59
Link zu diesem Artikel: (in die Zwischenablage)





(c) 2011 | Impressum |

| Empfehlenswerte Blog Einträge