データ更新通知
さて、コマンド実行の結果、色々とデータが更新されます。
|
|
えーっと、今回の15パズルの場合、どこかセルが入れ替わるわけよね。盤面の状態っていうデータが書き換わったと。
あとは、手数が増えたり、経過時間が増えたり。 あっ、経過時間は、コマンド実行の結果というか、タイマーイベントを使って毎秒更新ね。 |
|
はい。そして、データ更新に伴って、GUIの画面を書き換える必要があります。
|
説明を簡素化するために、15パズルのうち、手数を表示する部分にだけ注目しましょう。
ちょっと原始的な方法ですが、開発者自身が、イベントハンドラー内で画面を書き換えるという単純な方法もあります。以下のようなコードを書くということです。
int count = 0; var textCount = new TextBlock(); var buttonMove = new Button { Content = "移動" }; buttonMove.Click += (sender, e) => { count++; textCount.Text = count.ToString(); }; var buttonInit = new Button { Content = "初期化" }; buttonInit.Click += (sender, e) => { count = 0; textCount.Text = count.ToString(); };
「countを更新したらかならずテキストブロックの内容を書き換える」というような記述が必要になります。このやり方は、データの数や、データを表示したいGUI上の場所が増えた時に管理しきれなくなります。また、前節で説明した、「イベントハンドラー内に書くのはイベントとコマンドの対応付けだけ」という目標も達成できていません。
そこで、データバインディング(後述)という考え方が出てきます。
|
|
もっとも、扱うデータの数が少ないうちはイベントハンドラーに色々書いちゃう方が早いんだけどもねー。
|
|
まあ、データの数は、機能追加してるうちに、なんか気が付きゃ増えてるものよ。
後になって、「最初からデータバインディングを使っておけば」なんてこともあるから気を付けないと。 |