4

Winformsでは、私たち(開発者)はイベントを介してユーザーの操作を処理します。WPFでは、コマンドを取得しました。

質問:

  1. WinformsのイベントとWPFのコマンドの違いは何ですか?どのアプローチを使用する必要がありますか?そしていつ?

  2. WinformsのイベントとWPFのルーティングされたイベントの違いは何ですか?

4

2 に答える 2

2
  1. シリアル化され、プロセスに渡される可能性のあるオブジェクトによって表されるコマンドは、何であれ、より「柔軟」であるとしましょう。

  2. ルーテッドイベントは、次の戦略(ダイレクト、バブリング、トンネリング)をサポートします。また、ルーテッドイベントを使用して、イベント引数に適切なフラグを設定することでイベントが処理されたことを示すことができます。

于 2012-06-18T15:01:10.360 に答える
1

ルーティングされたイベントに関するMSDNの記事を読むことから始めることを強くお勧めしますが、私の観点からすると、最大の違いはそれらがどのように機能するかです。

Winformsを使用すると、イベントハンドラーにメソッドを割り当てることができ、そのコントロールのイベントが発生するたびに、そのハンドラーが実行されます。実際には、WPFで同じことを行うことも、ルーテッドイベントを使用することもできます。

ルーティングされたイベントでは、イベント(クリックイベントなど)が生成され、ビジュアルツリーの任意の要素がクリックイベント中に何かを実行するようにサブスクライブでき、イベントを処理済みとしてマークできます。

たとえば、 aとButtonを含むものがあるとします。BorderImage

<Button>
    <Border>
        <Image>
    </Border>
</Button>

をクリックしてImageも実行されませんが、代わりに、最初に、次に、、次に。によって処理されるButton.ClickEvent汎用Clickイベントが発生します。イベントを処理するコントロールの1つがイベントをマークしない限り、イベントは実際にはオブジェクトに到達するまでVisualTreeを上に移動します。ImageBorderButtonWindowHandled

このタイプのルーティングされたイベントは、Bubblingイベントがビジュアルツリーを上に移動する、つまり「バブル」するため、イベントと呼ばれます。もう1つのイベントタイプはTunneling、イベントがVisualTreeを下に移動する場合、またはDirectクリックされたオブジェクトのみがイベントを処理する場合です。

Routed Eventsとの違いについては、Commands2つの別々の機能を提供します。イベントは組み込みであり、イベントを処理するUIオブジェクトに関連付けられていますが、コマンドはUIオブジェクトに関連付けられておらず、コントロールを有効/無効にするための組み込みのサポートを提供します。

たとえば、ClickイベントのあるButtonはButtonオブジェクトをClickイベントハンドラーに渡しますが、Commandプロパティが設定されたButtonは無関係のコマンドを実行し、に応じてボタンを自動的に有効/無効にします。Command.CanExecute()

私はMVVMデザインパターンを使用しているため、ほとんどの場合コマンドを使用します(コントロールがCommandプロパティをサポートしていない場合は、ほとんどすべてのUIイベントにコマンドを添付できるカスタムの添付コマンド動作を使用します)が、それでも時々イベントを使用しますビューのみに影響し、ビジネスロジックを実行しない何かを実行したい場合。

于 2012-06-18T15:24:36.877 に答える