C#たんと学ぶ/わりと硬派なソフトウェア開発講座
第2-2回「デスクトップアプリケーション」
C#たんと学ぶ わりと硬派なソフトウェア開発講座(4)
データバインディング
![]() |
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回言って締めます! |
この記事は参考になりましたか?
既に会員の方はを行ってください。
- C#たんと学ぶ/わりと硬派なソフトウェア開発講座連載記事一覧
-
- C#たんと学ぶ/わりと硬派なソフトウェア開発講座 第3回「Webアプリケーション」(前編)
- C#たんと学ぶ わりと硬派なソフトウェア開発講座 番外編「Windows Phone 7」
- C#たんと学ぶ/わりと硬派なソフトウェア開発講座 第2-2回「デスクトップアプリケーション...
- この記事の著者
-
C#たん ソフトウェア開発講座 制作委員会(シーシャープタン)
ソフトウェアに求められる要求の高度化とともに大きくなる開発者への負担を、開発ツールやフレームワーク、時には萌え力を頼りに軽減できないか考えるプロジェクト。C#たんは単なるマスコットかと思いきや、割と毒舌。自分のことは棚に上げて、「萌えればいいってもんじゃないですよ?」が信条。twitter: @cs...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア









