データ更新通知
![]() |
さて、コマンド実行の結果、色々とデータが更新されます。
|
![]() |
えーっと、今回の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上の場所が増えた時に管理しきれなくなります。また、前節で説明した、「イベントハンドラー内に書くのはイベントとコマンドの対応付けだけ」という目標も達成できていません。
![]() |
そこで、データバインディング(後述)という考え方が出てきます。
|
![]() |
もっとも、扱うデータの数が少ないうちはイベントハンドラーに色々書いちゃう方が早いんだけどもねー。
|
![]() |
まあ、データの数は、機能追加してるうちに、なんか気が付きゃ増えてるものよ。
後になって、「最初からデータバインディングを使っておけば」なんてこともあるから気を付けないと。 |





