データバインディング
![]() |
WPFの場合、「データを更新したよ」ということをフレームワークに通知するだけで、画面の書き換えはフレームワーク側で行ってくれます。この仕組みをデータバインディング(data binding)と呼びます。
|
![]() |
Flexなんかも同じような仕組み持ってたはずよね、確か。
|
![]() |
ええ。
そして、同様の仕組みを持っているGUIフレームワークは徐々に増えてきていますね。 |
データバインディングを使う場合、画面とデータを別のクラスに分離して作ります。
サンプルの15パズルでいうと、画面がMainWindowクラス、データがFifteenPuzzleViewModelクラスです。画面側のDataContextというプロパティにデータを与えます。このDataContext以外では、画面側とデータ側は一切つながりを持ちません。
画面側
- 画面側コード: MainWindow.xaml
画面側のクラスは、XAMLコードで記述するレイアウトに関する情報だけを書きます。このとき、{Binding}という記述で、「ここにこのデータを表示する」という印を入れておきます。その他には、イベントハンドラーなどは一切書きません。この例の場合、データ側のCountプロパティの値を変更すると、TextBlockのTextに変更結果が反映されます。
コマンドの登録にも、このデータバインディングを使います。画面側では、Countプロパティと同様に、{Binding}を使って、Buttonにコマンドを登録します。
データ側
- データ側コード: FifteenPuzzleViewModel.cs
一方、データ側のクラスには、「Countプロパティの値を変更した」という通知を出すための仕組みを実装します。今回の場合、以下のようなC#コードを書きます。
public class FifteenPuzzleViewModel : NotificationObject { public int Count { get { return _Count; } set { _Count = value; // 変更通知を出す RaisePropertyChanged("Count"); } } private int _Count; }
![]() |
C#たん:
以下の3点が重要です。 |
|
|
![]() |
特に1番は大事ね。画面側に多くを書かない。
これはデスクトップアプリに限らず、どんな形態のGUIでも言えること。 |
まとめ
![]() |
ポイントは3つ。
|
|
|
![]() |
それ以外はGUIに依存しないように書く!
|
![]() |
あっ、締めのセリフ取られた・・・
いや・・・ |
![]() |
それ以外はGUIに依存しないように書く!
大事なのことなので2回言って締めます! |