MVVM の RelayCommand: UI ロジック分離の強化
Model-View-ViewModel (MVVM) アーキテクチャでは、UI 要素をビジネス ロジックから明確に分離するためにコマンドが不可欠です。 RelayCommand パターンは、この分離を達成するための特に効果的なツールとして際立っています。
コマンドの主な利点:
RelayCommand アプリケーション:
1.コマンド バインディング: Button や MenuItem などの UI コントロールには、多くの場合 Command
依存関係プロパティがあります。 ICommand
(RelayCommand など) をこのプロパティにバインドすると、ユーザー操作 (ボタンのクリックなど) でコマンドの実行を直接トリガーできるようになります。
2.インタラクティビティ トリガーによるイベント処理: コマンド バインディングを直接サポートしていないイベントの場合、インタラクティビティ トリガーはイベントを ICommand
インスタンスにリンクするメカニズムを提供します。
動的ボタンの有効化/無効化:
テキストボックスの内容に基づいて条件付きでボタンを有効または無効にするには (テキストボックスが空の場合に無効にするなど)、RelayCommand コンストラクター内の CanExecute
述語を利用します。 この述語は、必要な条件が満たされた場合にのみ true
と評価されます。 このアプローチにより、バインドされたコントロールの有効な状態がアプリケーションの現在の状態を確実に反映します。
RelayCommand 実装の完了:
次のコードは、RelayCommand
クラスの堅牢で完全な実装を提供します。
<code class="language-csharp">public class RelayCommand<T> : ICommand { private readonly Action<T> _execute; private readonly Predicate<T> _canExecute; public RelayCommand(Action<T> execute, Predicate<T> canExecute = null) { if (execute == null) throw new ArgumentNullException(nameof(execute)); _execute = execute; _canExecute = canExecute ?? (_ => true); } public bool CanExecute(object parameter) => _canExecute == null || _canExecute((T)parameter); public event EventHandler CanExecuteChanged { add => CommandManager.RequerySuggested += value; remove => CommandManager.RequerySuggested -= value; } public void Execute(object parameter) => _execute((T)parameter); }</code>
以上がUI ロジックの分離を改善するために MVVM で RelayCommand を使用する理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。