5

新しい (小さな) プロジェクトで MVVM パターンを学習していますが、コントローラーでアクションを呼び出す方法について 1 つの質問があります。

RelayCommand を宣言し、それを初期化し、RelayCommand によって呼び出されるアクションを作成することを意味する Command を使用するように指示している多くのチュートリアルを見ました。

CallMethodAction反対側には、トリガーでを使用できると言う同僚がいます。

<i:Interaction.Triggers> 
  <i:EventTrigger> 
    <ei:CallMethodAction MethodName="Init" TargetObject="{Binding}" /> 
  </i:EventTrigger> 
</i:Interaction.Triggers> 

私にとって、彼のアプローチには、コマンドの初期化メソッドを作成する必要がないという利点があります(使用されない可能性があります)。

それで、私は何が欠けていますか?なぜ誰もがコマンドを使用するのですか?

4

2 に答える 2

7

コマンドはすぐに使用できるソリューションであり、インターフェイスを実装する要素にのみアタッチできICommandます。一方、イベント トリガーは任意のイベントにアタッチできるため、より柔軟になります。ユーザーの操作 (ボタン、メニュー) が関係し、CanExecuteパターンが必要なコマンドを使用するという一般的な戦略に従います。私のコマンドは、ビジュアル インターフェイスに厳密に接続されています (キャプション、画像ソースなどを提供します)。コードビハインドを取り除きたい場合は、他の状況で CallMethodAction を使用します。

于 2012-11-27T10:37:26.633 に答える
4

コマンドは、ViewModel コードで無効にする機能を提供します。コマンドにバインドされたボタンなどを自動的に無効にするために使用できます。それがコマンドをより良くするものです。さらに、ロジックに基づいて、同じスロットで別の Command を動的に取り出すことができ、ビューからトラフィックを再ルーティングしますが、CallMethodAction では、呼び出されたメソッドに再ルーティング ロジックを記述する必要があり、見苦しくなります。

ご覧のとおり、達成しようとすることとロジックがどれほど複雑かによって異なります:)

于 2012-11-27T10:01:26.773 に答える