再利用可能な MVVM 構造にコマンドを実装する
最近の MVVM 実装では、複数のコマンドが必要になりました。単一の ICommand クラスを作成する退屈なプロセスを軽減するために、別のアプローチが考案されました。ただし、その有効性と潜在的な改善についてはまだ議論されていません。
提案されたソリューション: Generic ICommand
コマンド作成を統合するために、デリゲートを使用して実行可能関数を実行および実装する汎用 ICommand クラスが導入されています。この ICommand のコンストラクターでは、2 つのデリゲート メソッドが割り当てられています。続いて、ICommand メソッドはデリゲート メソッドを呼び出します。
機能は動作しますが、このアプローチがベスト プラクティスと一致しているかどうか、またはより適切なソリューションが存在するかどうかという疑問が生じます。
代替案: RelayCommand
Karl Shifflet が示したように、強く推奨される方法の 1 つは RelayCommand です。呼び出されたときに実行される操作を定義します。
RelayCommand の実装例:
<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 实现... }</code>
次の例に示すように、この実装によりコマンドの作成が簡素化されます。
<code class="language-csharp">public class MyViewModel { public ICommand DoSomethingCommand => new RelayCommand( p => this.CanDoSomething(), p => this.DoSomeImportantMethod()); }</code>
その他のリソース:
• Josh Smith による「パターン - MVVM デザイン パターンを使用した WPF アプリケーション」では、RelayCommand アプローチについてさらに詳しく説明されています。
以上が再利用可能な MVVM コマンドに対する最良のアプローチは汎用 ICommand または RelayCommand のどちらですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。