まず、RelayCommandの基本的な使い方を説明します。RelayCommandは、ICommandインターフェースを実装しており、実行可能なメソッドとCanExecuteメソッドを提供します。実行可能なメソッドは、コマンドが実行されたときに実行される処理を定義します。CanExecuteメソッドは、コマンドが実行可能な状態かどうかを判断します。
以下に、ジェネリックなRelayCommandのコード例を示します。
public class RelayCommand<T> : ICommand
{
private readonly Action<T> _execute;
private readonly Func<T, bool> _canExecute;
public RelayCommand(Action<T> execute, Func<T, bool> canExecute = null)
{
_execute = execute;
_canExecute = canExecute;
}
public bool CanExecute(object parameter)
{
return _canExecute == null || _canExecute((T)parameter);
}
public void Execute(object parameter)
{
_execute((T)parameter);
}
public event EventHandler CanExecuteChanged;
public void RaiseCanExecuteChanged()
{
CanExecuteChanged?.Invoke(this, EventArgs.Empty);
}
}
上記のコード例では、T
は引数の型を表します。Action<T>
は実行可能なメソッドを、Func<T, bool>
はCanExecuteメソッドを表します。コンストラクタで実行可能なメソッドとCanExecuteメソッドを指定し、CanExecute
メソッドとExecute
メソッドを実装します。
このようにして定義されたジェネリックなRelayCommandは、ボタンクリックなどのイベントにバインドして使用することができます。また、CanExecuteメソッドの結果に応じて、ボタンの有効/無効状態を制御することもできます。
以上が、ジェネリックなRelayCommandの使い方とコード例の紹介です。これを使うことで、MVVMパターンでコマンドを簡潔に実装することができます。是非、お試しください。