ホームページ > バックエンド開発 > C++ > RelayCommand と簡易 ICommand:どちらが MVVM に最適ですか?

RelayCommand と簡易 ICommand:どちらが MVVM に最適ですか?

Linda Hamilton
リリース: 2025-01-20 17:41:09
オリジナル
610 人が閲覧しました

RelayCommand vs. Simplified ICommand: Which is Best for MVVM?

簡易MVVM実装におけるRelayCommandパターンの詳細説明

MVVM (Model-View-ViewModel) アーキテクチャでは、複数のコマンドを作成するのは面倒な作業になることがあります。この問題により、単一の ICommand クラスを使用する簡素化されたアプローチなど、さまざまな解決策が提案されました。

簡略化されたコマンド実装

実装された ICommand クラスには、OnExecute (void を返す) と OnCanExecute (bool を返す) の 2 つのデリゲート メソッドが含まれています。コンストラクターでは、これらのメソッドがパラメーターとして渡されます。 ICommand インターフェイスの CanExecute メソッドと Execute メソッドは、対応するデリゲート メソッドを呼び出します。

簡略化されたコマンドの利点

  • 複数の ICommand クラスを作成する場合と比較して、コーディングの労力が軽減されます。
  • ViewModel クラスではコマンドを柔軟に定義できます。

代替手段を探す: RelayCommand

Karl Shifflet が実証したように、コマンドを簡素化する一般的な代替手段は RelayCommand です。 Action を使用して特定のアクションを実行し、よりクリーンな実装を可能にします。

RelayCommand の実装

RelayCommand は Predicate を使用して実行可能性を決定し、Action を使用して操作を実行します。これらのデリゲートはコンストラクターに渡されます。 CanExecute メソッドは述語を呼び出して可用性を確認し、Execute メソッドは操作を実行します。

RelayCommand の利点

  • バインドされたコマンドのプロパティ変更通知を自動的に提供します。
  • デリゲートパラメータによるパラメータ化をサポートします。

使用例

簡略化されたコマンドと RelayCommand は、ViewModel で同様の方法で使用できます。

<code>public class MyViewModel
{
    // 简化命令
    public ICommand DoSomethingCommand { get; set; }

    // RelayCommand
    public ICommand DoSomethingCommand2 { get; set; }

    public MyViewModel()
    {
        // 简化命令
        DoSomethingCommand = new TestCommand(CanDoSomething, DoSomeImportantMethod);

        // RelayCommand
        DoSomethingCommand2 = new RelayCommand(CanDoSomething, DoSomeImportantMethod);
    }

    // ...
}</code>
ログイン後にコピー

結論

RelayCommand は優れたソリューションを提供しますが、プロパティ変更の自動通知やパラメーターのサポートなどの追加の利点も提供します。どちらの方法でも MVVM コマンドの実装を効果的に簡素化できるため、開発者は定型コードではなくアプリケーション ロジックに集中できるようになります。

以上がRelayCommand と簡易 ICommand:どちらが MVVM に最適ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート