SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

C#たんと学ぶ/わりと硬派なソフトウェア開発講座

C#たんと学ぶ/わりと硬派なソフトウェア開発講座
第2-2回「デスクトップアプリケーション」

C#たんと学ぶ わりと硬派なソフトウェア開発講座(4)

  • X ポスト
  • このエントリーをはてなブックマークに追加

データバインディング

C#たん トーク
WPFの場合、「データを更新したよ」ということをフレームワークに通知するだけで、画面の書き換えはフレームワーク側で行ってくれます。この仕組みをデータバインディング(data binding)と呼びます。
C++たん トーク
Flexなんかも同じような仕組み持ってたはずよね、確か。
C#たん 閉じ目2
ええ。
そして、同様の仕組みを持っているGUIフレームワークは徐々に増えてきていますね。

 データバインディングを使う場合、画面とデータを別のクラスに分離して作ります。

 サンプルの15パズルでいうと、画面がMainWindowクラス、データがFifteenPuzzleViewModelクラスです。画面側のDataContextというプロパティにデータを与えます。このDataContext以外では、画面側とデータ側は一切つながりを持ちません。

画面側

 画面側のクラスは、XAMLコードで記述するレイアウトに関する情報だけを書きます。このとき、{Binding}という記述で、「ここにこのデータを表示する」という印を入れておきます。その他には、イベントハンドラーなどは一切書きません。この例の場合、データ側のCountプロパティの値を変更すると、TextBlockのTextに変更結果が反映されます。

 コマンドの登録にも、このデータバインディングを使います。画面側では、Countプロパティと同様に、{Binding}を使って、Buttonにコマンドを登録します。

データ側

 一方、データ側のクラスには、「Countプロパティの値を変更した」という通知を出すための仕組みを実装します。今回の場合、以下のようなC#コードを書きます。

public class FifteenPuzzleViewModel : NotificationObject
{
    public int Count
    {
        get { return _Count; }
        set
        {
            _Count = value;
             // 変更通知を出す
            RaisePropertyChanged("Count");
        }
    }

    private int _Count;
}
C#たん トーク
C#たん
以下の3点が重要です。
  1. 画面側は「ここにこのデータを表示する」という印だけを書く
  2. データ側は「このプロパティの値を変更した」という通知を出す
  3. 画面とデータの接点は1点に集約する
VBたん トーク
特に1番は大事ね。画面側に多くを書かない。
これはデスクトップアプリに限らず、どんな形態のGUIでも言えること。

まとめ

C#たん トーク
ポイントは3つ。
  • レイアウト
  • イベント駆動
  • データ更新通知
C++たん 断言
それ以外はGUIに依存しないように書く!
C#たん 考え中
あっ、締めのセリフ取られた・・・
いや・・・
C#たん 断言
それ以外はGUIに依存しないように書く!
大事なのことなので2回言って締めます!
飾り罫
おまけ

恒例となりましたお便りコーナー、今回も素晴らしいおハガキいただきました♪ 今後も引き続き、似顔絵やお手紙随時募集中です。

 

しげっち(http://blog.goo.ne.jp/sigetch_2005/)さん( @sygetch )からの投稿
しげっち(http://blog.goo.ne.jp/sigetch_2005/)さん( @sygetch )からの投稿

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
C#たんと学ぶ/わりと硬派なソフトウェア開発講座連載記事一覧

もっと読む

この記事の著者

C#たん ソフトウェア開発講座 制作委員会(シーシャープタン)

ソフトウェアに求められる要求の高度化とともに大きくなる開発者への負担を、開発ツールやフレームワーク、時には萌え力を頼りに軽減できないか考えるプロジェクト。C#たんは単なるマスコットかと思いきや、割と毒舌。自分のことは棚に上げて、「萌えればいいってもんじゃないですよ?」が信条。twitter: @cs...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6019 2011/07/04 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング