// 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;
}
}
}