Variousible ホーム Developers' Room トップ

データバインディング

2006/ 4/15

.net の Windows フォームでは、UI とオブジェクトを結びつける (Mac でいうと Cocoa バインディングかな ?) 機能がサポートされています。 ここでは、実際にテキストボックスとその値を管理するオブジェクトとを 結び付けてみます。これにより、テキストボックスの値をユーザが更新すると、 オブジェクトのボックスが自動的に書き換えられます。 逆にオブジェクトの値を更新すると、テキストボックスが更新されます。

データ管理クラス

まず、データを管理するクラスを定義します。 以下に単純な文字列プロパティを一つ持つクラス DataHolder を定義します。

データ管理クラス DataHolder
ref class DataHolder
{
public:
	DataHolder(void) {}
public:
	virtual ~DataHolder(void) {}

	event EventHandler^ TestTextChanged;

private:
	String^ testTextValue;

public:
	property String^ TestText {
		void set(String^ value) {
			this->testTextValue = value;
			TestTextChanged(this, gcnew EventArgs() );
		}

		String^ get() {
			return testTextValue;
		}
	}
};

TestText プロパティがテキストボックスとバインドする値です。 重要なのは、イベントハンドラを用意しておくことです。 イベントハンドラは、プロパティ名に "Changed" をつなげた名前でなくてはなりません。 推測ですが、内部的にリフレクションで実現されているのでしょう。 setter 関数はイベントを送出するように実装しておきます。

これで、プロパティが変更されたときに、以下のバインディングがなされていれば、 テキストボックスが変更通知を受けて値を変更します。

バインディング

次にテキストボックスとプロパティを関連付けます。 テキストボックスとデータ管理クラスが以下のように定義されているとします。

テキストボックスの定義
TextBox^ textBox1 = gcnew TextBox();
DataHolder^ holder = gcnew DataHolder();

テキストボックスには Text プロパティの値を表示されます。 したがって、このプロパティと先ほどの DataHolder の TestText プロパティをバインディングします。

バインディング
textBox1->DataBindings->Add("Text", holder, "TestText");

これで、完了です。 データ管理クラスのプロパティとテキストボックスのプロパティが連動します。 いかにも、リフレクションで実現してそうです。

Variousible ホーム Developers' Room トップ
※Java およびすべての Java に関する標章は、米国およびその他の国における米国 Sun Microsystems, Inc. の商標または登録商標です。
※その他の登場する製品名は、各社の商標または登録商標です。
本サイトについて
Copyright © 2006 KURIHARA, Yusuke. All rights reserved.