WPF の Model-View-ViewModel (MVVM) アーキテクチャでは、頻繁に ICommand が実装されるのが一般的です。 多数の個別の ICommand クラスを作成すると、コードの繰り返しが発生する可能性があります。この記事では、効率を高めるための再利用可能な ICommand 実装のソリューションを提供します。
単純なアプローチには、2 つのデリゲート メソッド (Execute
用と CanExecute
用) を利用する単一の ICommand クラスが含まれます。 コンストラクターはこれらのデリゲートを受け入れ、ICommand メソッド内で呼び出します。
しかし、Karl Shifflet の初期コンセプトから洗練された優れた代替案は RelayCommand
です。
RelayCommand
クラスは、ICommand
と Action<T>
にそれぞれ Predicate<T>
と Execute
を使用して、CanExecute
インターフェイスを実装します。これにより、ICommand の実装に、よりコンパクトで適応性の高い方法が提供されます。
<code class="language-csharp">public class RelayCommand : ICommand { private readonly Predicate<object> _canExecute; private readonly Action<object> _execute; public RelayCommand(Predicate<object> canExecute, Action<object> execute) { _canExecute = canExecute; _execute = execute; } // ICommand implementation // ... }</code>
RelayCommand
を ViewModel クラスに統合すると、ICommand のインスタンス化が簡素化されます。
<code class="language-csharp">public class MyViewModel { private ICommand _doSomething; public ICommand DoSomethingCommand { get { if (_doSomething == null) { _doSomething = new RelayCommand( p => this.CanDoSomething(), p => this.DoSomeImportantMethod()); } return _doSomething; } } }</code>
デリゲートを使用したカスタム ICommand 実装は機能しますが、RelayCommand
はよりエレガントで柔軟なソリューションを提供します。 RelayCommand
を採用すると、MVVM プロジェクトでの ICommand 実装が大幅に合理化されます。
以上がWPF の MVVM パターンで再利用可能な ICommand 実装を作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。