はじめに
筆者は、Visual Basic 2.0以来、データバインディングの概念を嫌ってきた多くの開発者の1人でした。データバインディングの仕組みは拡張性が低く、有益なプログラミング手法を活用していないし、期待通りに動作しないこともしょっちゅうでした。しかし、今はオブジェクトバインディングの愛好者であることを認めざるを得ません。
本稿では、まず、オブジェクトバインディングの基本について説明します。次に、オブジェクトバインディングをよりよく活用するためのヒントとテクニックを示します。オブジェクトバインディングで実行できることをすべて理解したならば、読者もこれが気に入ることでしょう。
オブジェクトバインディングの基本
Windows Formsにおけるオブジェクトバインディングの大前提は、Text
プロパティなどのWindows Formsコントロールプロパティを、ビジネスオブジェクトプロパティに結び付けることです。ビジネスオブジェクトを作成し、プロパティに値を代入すると、プロパティ値をコントロールにコピーするコードを記述しなくても、その値がアプリケーションのユーザーインターフェイスに反映されます。そしてユーザーがコントロールの内容を変更すると、更新された値がビジネスオブジェクトのプロパティに自動的に代入されます。
例えば、顧客情報を表示するフォームと、LastName
プロパティおよびFirstName
プロパティを持つCustomerビジネスオブジェクトがあるものとします。オブジェクトバインディングを使用すると、LastName
プロパティをLastName
テキストボックスのText
プロパティに割り当てるコードや、FirstName
プロパティ値をFirstName
テキストボックスのText
プロパティに割り当てるコードを記述する必要がありません。ユーザーがコントロール内のテキストを変更する場合は、逆が当てはまります。つまり、このすべての処理が自動的に行われるのです。
データベースへのバインディングでは、あらかじめ生成されている大量のコードにバインドする必要がありますが、それに対してオブジェクトバインディングでは、自分で記述したコードにバインドします。そのため、自分で多くを管理することが可能であり、アプリケーションのメンテナンスが非常に簡単です。
オブジェクトバインディングを試すために、新しいWindows Formsプロジェクトを作成し、クラスを1つ追加してみましょう(実際のアプリケーションでは、このクラスを別のプロジェクトに含める場合もあります。このサンプルでは、話を簡単にするために、すべてのクラスをWindows Formsプロジェクトに追加します)。次に、そのクラスにさまざまなプロパティを持たせます。例えば、Customer
クラスには、LastName
、FirstName
、CustomerID
の各プロパティがあります。LastName
プロパティのコードを以下に示します。
Private _LastName As String Public Property LastName() As String Get Return _LastName End Get Set(ByVal value As String) _LastName = value End Set End Property
private string _LastName; public string LastName { get { return _LastName;} set { _LastName = value;} }
プロパティプロシージャを作成するには、Propertyスニペットを使用するのが最も簡単です。VBコードウィンドウで「property」と入力し、[Tab]キーを押して、VB Propertyプロシージャを作成します。C#コードウィンドウでは、「prop」と入力し、[Tab]キーを2回押してプロパティを作成します。スニペットの使用または独自のスニペットの作成の詳細については、『CoDe Magazine』2006年1月/2月号の「Having Fun with Code Snippets」を参照してください。
ビジネスオブジェクト上で目的のプロパティを定義したら、プロジェクトをビルドします。ビルドプロセスによって、[Data Sources]ウィンドウからビジネスオブジェクトにアクセスできるようになります。ビジネスオブジェクトにプロパティを追加する場合はいつでも、[Data Sources]ウィンドウにプロパティが表示される前に、プロジェクトをリビルドする必要があります。
次に、データソースをビルドします。[Data Sources]ウィンドウが表示されていない場合は、[Data]ウィンドウの[Show Data Sources]を選択して表示し、[Add New Data Source]をクリックします。データソース構成ウィザードが起動します。
オブジェクトバインディングデータソースを作成するには、ウィザードの先頭のページで[Object]を選択し、2番目のページで目的のビジネスオブジェクトを選択します。[Finish]ボタンをクリックすると、[Data Sources]ウィンドウに新しいオブジェクトデータソースが表示されます。オブジェクトの各プロパティが、ウィンドウ内のオブジェクト名の下に表示されることに注意してください。
さて、これからが本番です。プロジェクトを作成するときに作成された既定のフォームを開きます。[Data Sources]ウィンドウ内のビジネスオブジェクトに関連するコンボボックスをドロップダウンし、[DataGridView]を選択して、すべてのビジネスオブジェクトをグリッドで表示するか、[Details]を選択して、個々のビジネスオブジェクトプロパティをフォーム上の個別のコントロールとして表示します。最後に、[Data Sources]ウィンドウからフォームへ、ビジネスオブジェクトの名前をドラッグします。図1は、[Details]セクションを使った場合の結果を示しています。[Data Sources]ウィンドウによるフォーム作成の詳細については、『CoDe Magazine』2004年9月/10月号の「Drag-Once Databinding」を参照してください。

オブジェクトバインディングデータソースは、フォームのコンポーネントトレイに自動的に追加され、ビジネスオブジェクトの名前にちなんだ名前が付けられます。この例の場合は、「CustomerBindingSource」です。生成されるコントロールは、このバインディングソースに自動的にバインドされます。
Visual Studio IDEは、プロパティの名前を使ってコントロールのラベルを作成しますが、アンダースコアや英字の大文字/小文字に基づいて単語間に空白を追加したりできます。これは、アプリケーションのユーザーインターフェイスの開始点として、非常に優れています。