// Copyright (C) Stichting Deltares 2021. All rights reserved. // // This file is part of Riskeer. // // Riskeer is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License // along with this program. If not, see . // // All names, logos, and references to "Deltares" are registered trademarks of // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. using System.Windows; using System.Windows.Input; namespace Core.Gui.Commands { /// /// Allows for binding of to the execution of a . /// public class RoutedCommandHandler : Freezable { /// /// Identifies the dependency property. /// public static readonly DependencyProperty CommandProperty = DependencyProperty.Register( nameof(Command), typeof(ICommand), typeof(RoutedCommandHandler), new PropertyMetadata(default(ICommand))); /// /// Gets or sets the command that should be executed when the RoutedCommand fires. /// public ICommand Command { get => (ICommand) GetValue(CommandProperty); set => SetValue(CommandProperty, value); } /// /// The command that triggers the . /// public ICommand RoutedCommand { get; set; } protected override Freezable CreateInstanceCore() { return new RoutedCommandHandler(); } /// /// Registers this handler to respond to the registered RoutedCommand for the /// given element. /// /// The element for which we should register the command /// binding for the current routed command. internal void Register(FrameworkElement owner) { var binding = new CommandBinding(RoutedCommand, HandleExecute, HandleCanExecute); owner.CommandBindings.Add(binding); } /// /// Executes with the /// from . /// /// The owner of the routed command. /// The event arguments given by the routed event. private void HandleCanExecute(object sender, CanExecuteRoutedEventArgs e) { e.CanExecute = Command?.CanExecute(e.Parameter) == true; e.Handled = true; } /// /// Executes with the /// from . /// /// The owner of the routed command. /// The event arguments given by the routed event. private void HandleExecute(object sender, ExecutedRoutedEventArgs e) { Command?.Execute(e.Parameter); e.Handled = true; } } }