.NETエンジニア・プログラマ向けの技術情報・業界ニュースをお届けします。

  1. FEnet.NETナビ
  2. .NETコラム
  3. プログラミング言語
  4. C#
  5. WPFのデータバインディングとは?C#によるデータの操作方法

WPFのデータバインディングとは?C#によるデータの操作方法

  • .NET
  • C#
  • WPF
  • プログラミング言語
公開日時:   更新日時:
WPFのデータバインディングとは?C#によるデータの操作方法
この記事でわかること
    基本情報技術者試験の試験対策はこちら>>

    WPFには、UI要素とデータソースを接続する「データバインディング」という機能があります。データソースには、.NETオブジェクト / XML / ADO.NETなどの様々なデータを設定することが可能です。 データバインディングは、WPF開発おける重要な役割を担っており、必須知識ともいえるでしょう。

    システム
    エンジニア
    WPFのデータバインディングがなかなか理解できません……
    プロジェクト
    リーダー
    WPFのデータバインディングは多機能な反面、最初は理解が難しいかもしれません。実際にアプリを作りながら理解していきましょう!

    WPFのデータバインディングの概要

    データバインディングとは、アプリUI(ビュー)と、そこに表示されるモデルなどのデータソースを接続するための機能です。
    例えば、TextBoxとモデル(.NETクラスなど)のプロパティをバインディングで接続しておくと、TextBoxの入力内容に変更があった時に、自動的にモデル(C#などで作られたクラス)に入力値を反映することができます。

    データバインディングにおける重要な4つの要素

    WPFのデータバインディングを理解する上で、次の4つの要素(用語)について知っておく必要があります。

    • ◆バインディング ターゲット:データ反映先のオブジェクト(主にUI要素)
    • ◆ターゲット プロパティ:データ反映先のバインディング ターゲットのプロパティ
    • ◆バインディング ソース:データ提供元(.NET オブジェクト、ADO.NET、XML など)
    • ◆ソース プロパティ:データ提供元のバインディング ソースのプロパティ

    注意点として、「ターゲット プロパティ」には、依存関係プロパティを指定する必要があります。実際は、TextBoxのTextプロパティなど、WPFのUI要素の多くのプロパティは依存関係プロパティになっており、そこまで強く意識する必要はありません。
    また、依存関係プロパティでも、読み取り専用のプロパティは「ターゲット プロパティ」に指定できません。

    XAMLにデータバインディングを書く方法

    データバインディングはマークアップ拡張機能を使って行い、XAMLファイルのUI要素に対し、Bindingキーワードに続く一連の宣言文字列で、「バインディング ソース」や「ソースプロパティ」を指定します。

    「.NETオブジェクト」とWPFの「UI要素」を接続

    次のようなC#のParsonクラスと、Label要素をデータバインディングで接続する簡単な例を見てみましょう。

    上記クラスのNameプロパティを、データバインディングする時は、XAMLには次のように書きます。

    バインディング ソースとなる、クラスのインスタンスは、DataContextプロパティに設定します。

    実行結果
    Nameプロパティのバインディング

    ほかのUI要素を参照する方法

    同じ画面のUI要素間で、データバインディングをすることも可能です。 例えば、次のようなスライダー要素と、テキストボックスをBindingで接続し、スライダーとテキストボックスの値を双方向に同期することができます。

    実行結果
    スライダーのデータバインディング

    上で紹介した2つの方法以外にも、WPFでは「XML」「ADO.NET」など、様々なオブジェクトをバインディングソースに設定できます。

    C#とWPFのデータバインディング活用例

    WPFアプリケーション開発で実際に使える活用例として、IValueConverterを使ったデータ変換を解説します。

    IValueConverterでデータ変換

    データベースを使用するWPFアプリでは、チェックボックスなどのBooleanの値を、データベース上では「YES/NO」や、「0/1」のような文字列で管理することがあります。
    チェックボックスの値はtrue or falseのBoolaen型であるため、データベースの値をそのままチェックボックスにデータバインディングすると、正しく動作しません。

    そのような時に、IValueConverterインターフェイスを実装した「コンバーター」を作成し、String型からBooladn型に変換することで、バインドの間にデータを変換を行うことができます。

    コンバーターの作成

    実際にC#で「コンバーター」を作ってみましょう。 今回は、文字列の“YES”と“NO”を、それぞれBoolean型のtrueとfalseに変換するコンバーターを作成します。

    まず、次のようなIValueConverterインターフェイスを実装した新しいクラスを作成し、ConvertとConvertBackメソッドを実装します。

    チェックボックスのIsCheckedに、上で作成したYesNoBooleanConverterを使用するようにXAMLを次のように編集します。

    ここまでの準備ができたら、バインディングソース(DataContext)に“YES/NO”のそれぞれの値を設定し、プログラム実行してみましょう。

    バインディングソースにYESを設定した場合

    実行結果
    yesのデータバインディング

    バインディングソースにNOを設定した場合

    実行結果
    noのデータバインディング

    システム
    エンジニア
    実際にアプリを作ってみて、データバインディングへの理解が深まりました!
    プロジェクト
    リーダー
    データバインディングは、WPFの「MVVMモデル」開発において重要な概念のため、理解しておくと便利ですよ。

    データバインディングはMVVMフレームワークでも重要な概念

    WPFアプリ開発の現場では、MVVMパターン開発を支援する「Prism」などのフレームワークを利用することが多く、これらのフレームワークを利用するためには、データバインディングに関する知識が必要になります。WPFとデータバインディングを活用し、自身のスキルアップを図りましょう。

    >>>C#の案件を探すならFEnet .NET Navi

    FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
    株式会社オープンアップシステムロゴ

    株式会社オープンアップシステムはこんな会社です

    秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
    数多くのエンジニアが集まります。

    秋葉原オフィスイメージ
    • スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。

    • 充実した研修制度

      充実した研修制度

      毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。

    • 資格取得を応援

      資格取得を応援

      スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。

    • 東証プライム上場企業グループ

      東証プライム上場企業グループ

      オープンアップシステムは東証プライム上場「株式会社夢真ビーネックスグループ」のグループ企業です。

      安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。

    株式会社オープンアップシステムに興味を持った方へ

    株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。

    年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
    まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。

    株式会社オープンアップシステムへのご応募はこちら↓
    株式会社オープンアップシステムへのご応募はこちら↓

    C#新着案件New Job