C#でのRelayCommandの使用方法


RelayCommandを使用すると、ユーザーのアクションに応じてコマンドを実行することができます。例えば、ボタンのクリックやメニューコマンドの選択などです。

まず、RelayCommandを使用するためには、System.Windows.Input名前空間をインポートする必要があります。次に、RelayCommandクラスを作成します。以下に、基本的なRelayCommandクラスの実装例を示します。

using System;
using System.Windows.Input;
public class RelayCommand : ICommand
{
    private readonly Action<object> _execute;
    private readonly Func<object, bool> _canExecute;
    public RelayCommand(Action<object> execute, Func<object, bool> canExecute = null)
    {
        _execute = execute;
        _canExecute = canExecute;
    }
    public event EventHandler CanExecuteChanged
    {
        add { CommandManager.RequerySuggested += value; }
        remove { CommandManager.RequerySuggested -= value; }
    }
    public bool CanExecute(object parameter)
    {
        return _canExecute?.Invoke(parameter) ?? true;
    }
    public void Execute(object parameter)
    {
        _execute(parameter);
    }
}

上記のコードでは、RelayCommandクラスがICommandインターフェースを実装しています。コンストラクタで実行するアクション(_execute)と、コマンドが実行可能かどうかを判定するための関数(_canExecute)を指定します。

また、CanExecuteChangedイベントを実装しています。このイベントは、コマンドの実行可能性が変更された場合に発生します。

RelayCommandのインスタンスを作成し、ボタンのクリックイベントやコマンドの実行イベントなどに割り当てることで、コマンドの実行を制御できます。

以下に、RelayCommandの使用例を示します。

public class ViewModel
{
    public ICommand MyCommand { get; }
    public ViewModel()
    {
        MyCommand = new RelayCommand(ExecuteMyCommand, CanExecuteMyCommand);
    }
    private void ExecuteMyCommand(object parameter)
    {
        // コマンドの実行時に行う処理を記述
    }
    private bool CanExecuteMyCommand(object parameter)
    {
        // コマンドが実行可能かどうかを判定する処理を記述
        return true;
    }
}

上記の例では、ViewModelクラス内でRelayCommandのインスタンスを作成し、MyCommandプロパティに割り当てています。ExecuteMyCommandメソッドは、コマンドが実行された際に実行される処理を記述します。CanExecuteMyCommandメソッドは、コマンドが実行可能かどうかを判定する処理を記述します。

このように、RelayCommandを使用することで、簡単にコマンドを実装し、ユーザーのアクションに応じてコードを実行することができます。