前回、
WPF・MVVMには
・Event
・Command
・Binding
・DataContext
・PropertyChanged
など、
データと処理を繋ぐ仕組みがある
という話を書きました。
今回はその中でも、
まず最初に理解しておきたい
Eventについてです。
Eventとは?
Eventを一言でいうと、
「何かが起きたことを知らせる仕組み」
です。
例えば、
・ボタンがクリックされた
・画面が表示された
・マウスが動いた
・キーが押された
・テキストが変更された
・リストの選択が変わった
など、
「何か起きました!」
という出来事を知らせてくれます。
つまり、
Eventとは「出来事」そのものではなく、
その出来事をプログラムへ伝えるための仕組みです。
Eventだけでは何も起きない
ここで勘違いしやすいのですが、
Eventは処理そのものではありません。
例えば、
ボタンを押しただけでは、
画面遷移もしません。
保存もしません。
印刷もしません。
Eventは、
「ボタンが押されました」
と知らせているだけです。
その後、
そのEventに紐付いた処理が実行されます。
例えば、
ボタンを押す
↓
Clickイベント発生
↓
画面遷移処理
という流れになります。
実際のコードを見てみよう
例えば、
ボタンがクリックされた時のEventは、
こんな風に書きます。
<Button Content="次へ"
Click="NextButton_Click"/>
この
Click
がEventです。
そして、
Clickイベントが発生すると、
次の処理が呼ばれます。
private void NextButton_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("ボタンが押されました");
}
つまり、
ボタンを押す
↓
Clickイベント発生
↓
NextButton_Click が呼ばれる
という流れになります。
今回はClickを例にしましたが、
画面が表示された時なら Loaded、
文字が変更された時なら TextChanged、
リストの選択が変わった時なら SelectionChanged など、
WPFにはたくさんのEventがあります。
デバッグではどこを見る?
例えば、
「ボタンを押しても画面遷移しない」
という不具合が発生したとします。
そんな時、
いきなり画面遷移処理を調べるのではなく、
まず確認したいのは、
Eventが発生しているか
です。
例えば、
ボタン
↓
Clickイベント
↓
画面遷移処理
↓
次画面表示
という流れなら、
まずは
Clickイベントまで来ているかを確認します。
もし、
Clickイベントが呼ばれていなければ、
画面遷移処理を調べても意味がありません。
逆に、
Clickイベントまで来ているなら、
次は画面遷移処理を調べれば良いことが分かります。
こうやって、
原因候補を一つずつ絞っていくことで、
調査もしやすくなります。
でもMVVMでは少し書き方が変わる
ここまで紹介したのは、
Eventを直接使う方法です。
でも、
MVVMでは、
こんなコードをよく見かけます。
<Button Content="次へ"
Command="{Binding NextCommand}" />
「あれ?」
「Clickがない。」
そう思った人もいるかもしれません。
実は、
MVVMでは
Clickイベントの代わりに
Command
という仕組みを使うことが多くあります。
では、
なぜわざわざCommandを使うのでしょうか。
次回はCommand
今回は、
Eventについて紹介しました。
Eventは、
「何かが起きたことを知らせる仕組み」
です。
そして、
MVVMでは、
そのEventを直接使わず、
Commandを使う場面が多くあります。
次回は、
「なぜMVVMではCommandを使うのか?」
について、
実際のコードも見ながら整理していこうと思います。
まとめ
今回は、
WPF・MVVMで最初に理解しておきたい
Event
について紹介しました。
覚えておきたいポイントは3つです。
✅ Eventは「何かが起きたこと」を知らせる仕組み
✅ Clickは数あるEventの一つ
✅ デバッグでは、まずEventまで来ているか確認すると調査しやすい
まずは、
「ボタンを押した」
ではなく、
「ClickというEventが発生した」
という見方を意識してみてください。
それだけでも、
ソースコードの見え方が少し変わってくると思います。
関連記事
シリーズの入口
・WPF・MVVMで最初に覚えておきたいこと|プログラムは「データ」と「処理」だけでは動かない
次に読む
・ボタンを押したらなぜ画面が切り替わるの?|WPF・MVVMのCommandを理解しよう
(公開後に追加)
あわせて読みたい
・WPFでよくあるCommandハマりポイント3選+回避策
・WPFのDataContextでハマるポイント3選【MVVM】