Winformsでは、私たち(開発者)はイベントを介してユーザーの操作を処理します。WPFでは、コマンドを取得しました。
質問:
WinformsのイベントとWPFのコマンドの違いは何ですか?どのアプローチを使用する必要がありますか?そしていつ?
WinformsのイベントとWPFのルーティングされたイベントの違いは何ですか?
シリアル化され、プロセスに渡される可能性のあるオブジェクトによって表されるコマンドは、何であれ、より「柔軟」であるとしましょう。
ルーテッドイベントは、次の戦略(ダイレクト、バブリング、トンネリング)をサポートします。また、ルーテッドイベントを使用して、イベント引数に適切なフラグを設定することでイベントが処理されたことを示すことができます。
ルーティングされたイベントに関するMSDNの記事を読むことから始めることを強くお勧めしますが、私の観点からすると、最大の違いはそれらがどのように機能するかです。
Winformsを使用すると、イベントハンドラーにメソッドを割り当てることができ、そのコントロールのイベントが発生するたびに、そのハンドラーが実行されます。実際には、WPFで同じことを行うことも、ルーテッドイベントを使用することもできます。
ルーティングされたイベントでは、イベント(クリックイベントなど)が生成され、ビジュアルツリーの任意の要素がクリックイベント中に何かを実行するようにサブスクライブでき、イベントを処理済みとしてマークできます。
たとえば、 aとButton
を含むものがあるとします。Border
Image
<Button>
<Border>
<Image>
</Border>
</Button>
をクリックしてImage
も実行されませんが、代わりに、最初に、次に、、次に。によって処理されるButton.ClickEvent
汎用Click
イベントが発生します。イベントを処理するコントロールの1つがイベントをマークしない限り、イベントは実際にはオブジェクトに到達するまでVisualTreeを上に移動します。Image
Border
Button
Window
Handled
このタイプのルーティングされたイベントは、Bubbling
イベントがビジュアルツリーを上に移動する、つまり「バブル」するため、イベントと呼ばれます。もう1つのイベントタイプはTunneling
、イベントがVisualTreeを下に移動する場合、またはDirect
クリックされたオブジェクトのみがイベントを処理する場合です。
Routed Events
との違いについては、Commands
2つの別々の機能を提供します。イベントは組み込みであり、イベントを処理するUIオブジェクトに関連付けられていますが、コマンドはUIオブジェクトに関連付けられておらず、コントロールを有効/無効にするための組み込みのサポートを提供します。
たとえば、Click
イベントのあるButtonはButtonオブジェクトをClickイベントハンドラーに渡しますが、Command
プロパティが設定されたButtonは無関係のコマンドを実行し、に応じてボタンを自動的に有効/無効にします。Command.CanExecute()
私はMVVMデザインパターンを使用しているため、ほとんどの場合コマンドを使用します(コントロールがCommand
プロパティをサポートしていない場合は、ほとんどすべてのUIイベントにコマンドを添付できるカスタムの添付コマンド動作を使用します)が、それでも時々イベントを使用しますビューのみに影響し、ビジネスロジックを実行しない何かを実行したい場合。