説明

ユーザインターフェースプロパティをデータにより制御するためのプログラムを格納した記録媒体およびシステム

【課題】ユーザインターフェース(UI)プロパティをデータとともに制御する命令を格納したコンピュータ可読記録媒体を提供する。
【解決手段】アプリケーションを備えたコンピューティングデバイスは、独立したパーツと、ロジック部分と、UI部分に分けられる。ロジック部分では、アプリケーション内のデータバリューを操作する。UI部分は、UIプロパティの表示を受け持つ。バインディング仕様により、UOプロパティとデータバリューとの間の関係を記述する。バインディング仕様は、データバリューに変更が生じたときに通知される方法と、変更をUIプロパティに反映するようにUO部分を指令する方法を決定するために、システムレベルコードにより使用される。バインディング仕様は、ソースデータ項目、ソースデータ項目内のデータバリューへのパス、ターゲットUIエレメント、およびターゲットUIエレメントのUOプロパティを識別する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ユーザインターフェースプロパティをデータにより制御するためのプログラムを格納した記録媒体およびシステムに関する。
【背景技術】
【0002】
ユーザに情報がどのように提示されるかにより、ユーザが情報をどの程度理解し把握できるかが決まる。コンピュータの表示装置では、色、フォントのスタイルなどを使用することにより、情報に強調(emphasis)を加えるのが標準的慣例となっている。このような強調を加えると、ユーザは情報の重要性を容易に把握することができる。情報(ユーザインターフェース)の表示を処理するコードおよび情報に対しアプリケーションのロジックを実行するコードは、通常、密接に結びついている。例えば、ロジックは、ユーザインターフェースのプロパティ(例えば、色、フォント、位置、サイズ)に直接データを割り当てる。したがって、ユーザインターフェースに変更があれば、ロジックも変わらなければならない。例えば、テキストボックス(text box)の場合、ユーザインターフェースコード(user interface code)はリッスン(listen)してテキストが変更(change)されたかどうかを判定(determine)し、変更(a change)があった場合、ユーザインターフェースコードは変更されたテキスト(changed text)が有効かどうかを確認(validate)し、その後、変更されたテキスト(changed text)を表示(display)する。ユーザインターフェースとロジックがこのように密接に結びついているという性質(nature)のため、コードは非常に脆弱(fragile)なものとなる。この脆弱なコード(fragile code)のメンテナンス(maintaining)は、非常にコストがかかり、時間も要する。
【発明の概要】
【発明が解決しようとする課題】
【0003】
本発明は、ユーザインターフェースプロパティをデータにより制御するプログラムを格納した記録媒体およびシステムを提供する。
【課題を解決するための手段】
【0004】
本発明は、データをユーザインターフェースに関連付けるメカニズムを用意することにより、ユーザインターフェースとデータをそのアプリケーションロジック(application logic)とともに分離(decouple)する。本発明により、アプリケーションロジックを書くユーザインターフェース設計者(user interface designers)およびアプリケーション作成者(application authors)は独立に作業することができる。設計者(designers)も作成者(authors)も、互いに相手のコード(other's code)を理解する必要がないか、あるいは相手のコード開発(other's code development)に影響を与える(impact)こともない。本発明では、さらに、ユーザインターフェースへの変更をまったく簡単に行うことができる。例えば、新しい、よりユーザに訴える力のあるユーザインターフェースプラットフォーム(user interface platform)が使用可能になった場合、またはユーザインターフェース設計者がアプリケーションの外観(look of the application)を変更したくなった場合でも、設計者はアプリケーションロジック(application logic)を変更(change)する必要はない。さらに、データをユーザインターフェースに関連付けるメカニズムは、動的(dynamic)である。これにより、データの変更を自動的にプレゼンテーションに反映させることができる。さらに、ユーザインターフェースを介してユーザが行った入力により自動的にデータをアップデートすることができる。本発明を使用すると、ユーザインターフェースのデータ表示態様(data display aspect)(例えば、テキスト)だけでなく視覚的態様(visual aspect)(例えば、背景、フォントサイズなど)の関連付け(association)を行えるので、データの記述的な、視覚的効果の高い、柔軟性の高いプレゼンテーションが可能になる。例えば、株価が上昇しているときに、負数は赤色で表示されるか、または矢印は上方向を指すように表示できる。
【0005】
したがって、本発明によれば、アプリケーション(an application)は、独立したパーツ(independent parts)と、ロジック部分(a logic portion)と、UI部分(UI portion)とに分けられる。ロジック部分では、アプリケーション内のデータバリュー(data values)を操作(manipulate)する。UI部分は、データのプレゼンテーション(presentation of the data)を受け持つ。バインディング仕様(binding specification)により、UIプロパティ(UI property)とデータバリュー(data value)との間の関係を記述(describe)する。バインディング仕様は、データバリューに変更(a change)が生じたときに通知される方法と、その変更をUIプロパティに反映(reflect)するようにUI部分を指令する方法を決定するために、システムレベルコード(system level code)により使用される。バインディング仕様は、ソースデータ項目(source data item)、ソースデータ項目内のデータバリューへのパス(a path to the data value)、ターゲットUIエレメント(target UI element)、およびターゲットUIエレメントのUIプロパティ(UI property on the target element)を識別(identify)する。バインディング(binding)は、コードまたはマークアップ言語(markup language)を使用して特定(specify)される。
【図面の簡単な説明】
【0006】
【図1】本発明の実施例で使用できるコンピューティングデバイスの一例を示す図である。
【図2】本発明にしたがってユーザインターフェースプロパティをデータで制御するための一実施形態を例示した機能ブロック図である。
【図3】本発明の一実施形態によりユーザインターフェースプロパティをデータバリューにとバインドするプロセスを例示した論理流れ図である。
【図4】本発明にしたがってユーザインターフェースプロパティをデータと関連付ける複数の構文例を例示した図である。
【発明を実施するための形態】
【0007】
本発明は、ユーザインターフェースをデータにより制御するシステムおよび方法を対象とする。本発明は、データをユーザインターフェースに関連付けるメカニズムを用意することにより、ユーザインターフェースとアプリケーションロジックとを分離する。後に詳述するが、関連するロジックとともに、ユーザインターフェースとデータとの間で行われるこのような分離により、さまざまな開発者グループは、他のグループのコード開発に影響を与えることなく、ユーザインターフェースおよびロジックの両方を取り扱うことができる。さらに、後に詳述するが、本発明は、データソースからユーザインターフェースへ、ユーザインターフェースからデータソースへデータを自動的に転送するシステムをおよびメカニズムを実現する。以下の説明全体を通して、「データバインディング(databinding)」という用語は、データバリュー(data value)をUIプロパティに関連付け、データバリューを転送(transfer)しアップデート(update)するなどのプロセスを指す。
【0008】
コンピューティング環境
図1は、本発明を実施する際に使用することが可能なコンピューティングデバイスの一例を示す。図1を参照すると、非常に基本的な構成では、コンピューティングデバイス100は、少なくとも1つの処理ユニット102およびシステムメモリ104を備えるのがふつうである。コンピューティングデバイス100の正確な構成と種類に応じて、システムメモリ104は揮発性(RAMなど)、不揮発性(ROM、フラッシュメモリなど)、またはこれら2つの何らかの組み合わせとすることができる。システムメモリ104は、通常、オペレーティングシステム105、1つまたは複数のプログラムモジュール106を格納し、プログラムデータ107を含むこともある。プログラムモジュール106の例としては、ブラウザアプリケーション、財務管理アプリケーション、ワードプロセッサなどがある。基本構成は、図1において点線108内のコンポーネントにより示されている。
【0009】
コンピューティングデバイス100は、さらに特徴または機能を追加することもできる。例えば、コンピューティングデバイス100は、磁気ディスク、光ディスク、またはテープなどの追加データ記憶デバイス(取り外し可能および/または取り外し不可能)を備えることもできる。このような追加ストレージ(additional storage)は、図1では、取り外し可能ストレージ109および取り外し不可能ストレージ110により例示されている。コンピュータ記憶媒体は、コンピュータ可読命令、データ構造体、プログラムモジュール、またはその他のデータなどの情報を格納する方法または技術で実施される揮発性および不揮発性、取り外し可能および取り外し不可能媒体を含むことができる。システムメモリ104、取り外し可能ストレージ109、および取り外し不可能ストレージ110は、コンピュータ記憶媒体のすべての例である。コンピュータ記憶媒体としては、RAM、ROM、EEPROM、フラッシュメモリまたはその他のメモリ技術、CD−ROM、デジタル多目的ディスク(DVD)またはその他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたはその他の磁気記憶デバイス、または目的の情報を格納するために使用されることができコンピューティングデバイス100によりアクセスされることが可能なその他の媒体がある。このような任意のコンピュータ記憶媒体をデバイス100の一部とすることができる。さらにコンピューティングデバイス100は、キーボード、マウス、ペン、音声入力デバイス、タッチ入力デバイスなどの入力デバイス112を備えることもできる。表示装置、スピーカー、プリンタなどの出力デバイス114を備えることもできる。これらのデバイスは、当業ではよく知られているため、本明細書でさらに詳しい説明をする必要はない。
【0010】
また、コンピューティングデバイス100は、デバイスがネットワークなどで他のデバイス118と通信するために使用する通信接続(communication connection)116も含むことができる。通信接続116は、通信媒体の一例である。通信媒体は、通常、搬送波またはその他のトランスポートメカニズムなどの変調データ信号を介して、コンピュータ可読命令、データ構造体、プログラムモジュール、またはその他のデータによって実現されることができ、情報配信媒体を含む。「変調データ信号(modulated data signal)」という用語は、信号内の情報を符号化する方法によりその特性のうち1つまたは複数が設定または変更された信号を意味する。例えば、通信媒体としては、有線ネットワークまたは直接配線接続などの有線媒体、および音響、RF、赤外線、およびその他の無線媒体などの無線媒体がある。本明細書で使用されているコンピュータ可読媒体という用語は、記憶媒体と通信媒体の両方を含む。
【0011】
実施例
図2は、本発明によりユーザインターフェースプロパティをデータにより制御するシステム200の一実施形態を例示する機能ブロック図である。システム200は、アプリケーション202、プラットフォーム220、およびデータソース230を含む。アプリケーション202は、図1に示されているコンピューティングデバイス100上の複数のアプリケーション106のうちの1つとすることができる。アプリケーション202は、データバリュー(例えば、ソースデータバリュー(source data value)238)を操作するためのコード(これ以降、ロジック204と呼ぶ)を含む。一般に、ロジック204はデータバリューに対し検証(validation)を実行し、データバリューをアップデートする。データバリュー(例えば、データバリュー238)は、データ項目(例えば、データ項目232)のプロパティ(つまり、データソースプロパティ)の内容を表す。データ項目232は、データソース(例えば、データソース230)内に配置されている。それぞれのデータソース230は、複数のデータ項目を含むことができ、それぞれのデータ項目は、1つまたは複数のプロパティを備え、ソースデータバリューがそのプロパティに格納される。ロジック203は、複数のデータソースからのデータバリューを操作することができる。データソースは、XMLドキュメント、オブジェクト、データセットなどを含むことができる。後で詳述するが、データ項目のそれぞれのプロパティは、ユーザインターフェース(UI)を制御するために使用されることが可能である。
【0012】
アプリケーション202はさらに、情報を表示するためのコード(これ以降ユーザインターフェース206と呼ぶ)も含む。ユーザインターフェース206は、複数のユーザインターフェースエレメント(例えば、ユーザインターフェースエレメント208)を含む。それぞれのユーザインターフェースエレメント208は、表示されるテキスト、色、フォント、位置、サイズなどの1つまたは複数のプロパティ(例えば、UIプロパティ210および212)を含む。次に、後で詳述するが、これらのUIプロパティ210および212は、本発明により、データバリュー238および242の1つまたは複数に関連付けられる。一般に、関連付けは、プラットフォーム220内のバインディングエンジン(binding engine)224を介して実行される。プラットフォーム220は、オペレーティングシステム、仮想エンジンなどのシステムレイヤのサービスを表す。プラットフォーム220は、さらに、データバリュー234および242に関係する階層情報を保持し、関連付けられているプロパティをデータバリューでアップデートする役割を持つプロパティエンジン222を備える。バインディングエンジン224およびプロパティエンジン222は別々のコンポーネントとして示されているとしても、当業者であれば、それぞれに備えられている機能は、本発明から逸脱することなく、1つのコンポーネント内に収められることを理解するであろう。
【0013】
データバリュー238および242とそのUIプロパティ210および212との関連付け(つまり、バインディング)は、図2において、データバリューからUIプロパティへの点線で表されている(これ以降バインディング226および228と呼ぶ)。以下の説明では、「データバリュー」という用語は「ソースデータバリュー」という用語に言い換えられることができる。同様、UIプロパティという用語は、「ターゲットプロパティ」という用語に言い換えられることもできる。これらのバインディング226および228を使用すると、動的プロパティ(つまり、ターゲットプロパティ)は任意のオブジェクトのプロパティなどのデータバリュー(つまり、ソースデータバリュー)から自動的に設定されるようにできる。これらのバインディングは動的であり、ソースデータバリューの変更を反映するようにバインドされたターゲットプロパティは自動的にアップデートされる。
【0014】
この自動的にアップデート機能を実現するために、本発明では、さらに、通知メカニズム(notification mechanism)を用意している(例えば、図2において、ノーティファイヤ(notifier)236および240とノーティファイヤからプラットフォーム220までの矢印で表されている)。各データ項目232および234にはそれぞれ、対応するノーティファイヤ236および240がある。通知メカニズムは、ソースデータバリューが変更されたこと、およびデータバリューはターゲットプロパティ(つまり、UIプロパティ)に伝搬されることが可能であることをシステムに通知する役割を持つ。
【0015】
マークアップ、コードなどを通じてバインディング226および228が作成されると、バインディングエンジン224はバインディングに関連付けられているバインディングオブジェクト(例えば、バインディングオブジェクト250および252)を作成する。例えば、バインディングオブジェクト252は、バインディングエンジン224内のバインディング228を表すことができる。それぞれのバインディングオブジェクトは、複数のプロパティを含む(例えば、バインディングプロパティ260〜272)。これらのバインディングプロパティ260〜272は、プログラムによる設定が可能である。以下の説明では、これらのプロパティのそれぞれについて説明し、図4に、それらプロパティのいくつかを特定(specify)するバインディングをアクティブにするコード例を示す。
【0016】
バインディングプロパティの1つ(one of the binding properties)(これ以降、パス(path)260と呼ぶ)は、(ソースオブジェクトを介して)ソースデータバリューを特定する方法を識別する。パス260は、ソースオブジェクト上のプロパティ、サブプロパティ、またはインデクサ(indexer)、ADO(ActiveX Data Objects)内の列、XML上のXPathなどを参照することができる。それとは別に、パスによりリフレクションまたはADOパスを参照することもできる。
【0017】
バインディングプロパティのもう1つ(これ以降、バインドタイプ(bindtype)262と呼ぶ)により、バインディング226および228の型を定義する。一実施形態では、バインドタイプは、単方向(oneWay)の、双方向(twoWay)の、および一度だけ(oneTime)の、ものを含む。図のように、バインディング226は、双方向バインディング(twoWay binding)を表し、バインディング228は、単方向バインディング(oneWay binding)を表す。これらのバインディングタイプの1つはデフォルトとして設定される。一実施形態では、双方向バインディングが、デフォルトバインディングタイプとして設定されている。
【0018】
バインドタイプ262が単方向(oneWay)として指定されている場合、これは、バインディングエンジン224に、関連するソースデータバリューに変更が生じる毎にターゲットプロパティ(例えば、UIプロパティ210)をアップデートするよう通知する。OneWayバインドタイプは、データバリューを、テキスト色、テキスト背景色などの編集不可能なUIプロパティにバインドする場合に使用される。単方向バインドタイプを使用すると、後述するように、双方向バインドタイプのオーバーヘッドを避ける(avoid)ことができる。このようにオーバーヘッドの減少は、レイアウト内容に関するUIプロパティの変更をリッスン(listen)している場合に最も顕著である。これらのUIプロパティに対して、UIプロパティの子のそれぞれの動的プロパティは、UIプロパティ変更に関してリッスンされなければならない。単方向バインドタイプもまた、UIプロパティの変更が単に他の表示の詳細を示すためだけであれば、有用であると思われる。
【0019】
バインドタイプ262が双方向として指定されている場合、これは、バインディングエンジン224に、ソースデータバリューに変更が生じる毎にターゲットプロパティをアップデートし、またその逆を行うよう通知する。双方向バインディングは、ユーザが編集ボックスで行った変更がソースデータバリューに伝搬される必要がある場合にデータを編集ボックスにバインドするときに特に有用である。双方向バインディングの別のシナリオは、他のアプリケーションがソースデータフィールドを受け持ち、変更が編集ボックスの中に反映される場合である。
【0020】
バインドタイプ262が一度だけのものとして指定されている場合、これは、バインディングエンジン224に、関連するソースデータバリューが変更された場合でも、ターゲットプロパティを1回アップデートしてからそのまま終了するよう通知する。一度だけのバインドタイプ(oneTime bindtype)は、一部のターゲットプロパティがソースフィールドからの何らかのバリューで初期化される必要があり、データコンテキストがあらかじめ知られていない場合に使用される。さらに、一度だけのバインドタイプは、ソースデータバリューを変更せずに読み取り専用で使用する場合に有用である。データソースが本発明のプロパティ通知メカニズムをサポートしていない場合(例えば、IPropertyChangeインターフェース)、単方向として指定されているターゲットプロパティは、バインディングがバインドタイプとして一度だけを指定している場合と同様にアップデートされる。
【0021】
バインディングプロパティのもう1つ(これ以降、アップデートタイプ264と呼ぶ)により、バインドタイプ262が双方向を指定する場合に対するアップデートの種類を定義する。通常、双方向バインディングは、ターゲットプロパティの変更をリッスンし、その変更をソースデータバリューに伝搬させて返す。このプロセスは、ソースをアップデートすると言われる。通常、ターゲットプロパティが変更されると必ずアップデートすることが望ましい。しかし、状況によっては、キーを押す毎にアップデートするのでは無駄なサイクルが発生し、ユーザには入力エラーなどを訂正するチャンスがない。アップデートタイプ(updatetype)264では、ユーザはアップデートを実行する時期を特定することができる。一実施形態では、アップデートタイプ264により、Immediate、OnLostFocus、およびExplicitを特定(specify)することができる。Immediateを特定すると、バインディングエンジンは、ターゲットプロパティが変更される毎に、ソースデータバリューをアップデートする。OnLostFocusを特定すると、バインディングエンジンは、ターゲットエレメントがキーボードのフォーカスを失った後、ソースデータバリューをアップデートする。Explicitを特定すると、バインディングエンジンは、アプリケーションがアップデートを明示的に要求した場合のみ、ソースデータバリューをアップデートする。通常、この明示的な要求はメソッドを介して実行される。このメソッドはアップデートタイプ264の設定のため呼び出されることが可能であっても、このメソッドは、アップデートタイプがExplicitに設定されている場合に使用される。方法例を1つ以下に示す。
Binding.GetBinding(myElement, myProperty).Update();
【0022】
バインディングプロパティのもう1つ(これ以降、ソース(source)266と呼ぶ)により、バインディングに対するソースデータ項目を識別する。簡単にいうと、図4に示され、それに関して説明されているように、ソース266は、プログラムにより、またはマークアップを使用して、設定されることが可能である。プログラムに関しては、開発者は、バインディングでソースデータ項目として使用しなければならないオブジェクトへのobjectrefを用意する。簡単にいうと、図4に関して詳細に説明していうように、マークアップでは、ソースプロパティを設定するさまざまな方法がある。
【0023】
バインディングプロパティのもう1つ(これ以降、トランスフォーマ(transformer)268と呼ぶ)は、クラス参照(class reference)を受け入れる。クラス参照は、<Namespace>.<Class>,<Assembly>を使用して特定されることが可能である。特定されているクラス参照は、バインディングエンジン224により呼び出され、ソースデータバリューをターゲットプロパティによって受け入れられる形式にトランスフォームする。クラス参照内のメソッドはこのトランスフォームを呼び出すが、図2にトランスフォーム244として表されている。クラス参照では、さらに、ターゲットプロパティをソースデータバリューにより受け入れられる形式にトランスフォームする逆トランスフォーム(inverse transform)(図に示されていない)も特定することができる。トランスフォーム244は、UIの意味を供給するか、またはカスタムタイプのコンバータとすることができる。
【0024】
バインディングプロパティのもう1つ(これ以降カルチャー270と呼ぶ)は、ソースデータバリューをトランスフォームする前/後にソースデータバリューが処理されるべき方法を定義する。カルチャー270は、トランスフォーマ268とともに動作し、開発者はいソースデータバリューをトランスフォームする規則を特定することができる。例えば、カルチャーでは、数バリュー、日付などに対する特定の形式を特定することができる。一実施形態では、カルチャー270は、CultureInfo型のバリューを受け入れる。開発者は、トランスフォームを実行する際にカルチャー270により特定された規則を使用するオプションを用意する。
【0025】
バインディングプロパティのもう1つ(これ以降、バインドフラグ272と呼ぶ)は、イベントを受信し、データの転送を通知するイベントを受信するメカニズムを備える。データバインディングの上述の方法は非同期であるが、バインドフラグ272では、開発者はいつターゲットが新しいバリューでアップデートされているかを知ることができる。このメカニズムを使用するために、バインドフラグ272は「NotifyOnTransfer」に設定される。その後、いつもの方法を使用しイベントに関してハンドラを登録する。このようなメカニズムの一使用例を以下に示す。

Public static void main()
{
//ハンドラを追加する
elem.AddAttachedHandler(Binding.DataTranferEvent,
new DataTranferEventHandler(OnDataTransfer),
RoutedEventArgs.EventStage.Direct);

//イベントハンドラ
private static void OnDataTransfer(Element e, DataTransferEventArgs args)
{
DynamicProperty DP=args.DP;
v=e.GetValue(DP);
DoSomething(v);
}
source.field="new value";
}.
【0026】
上記のコード例に示されているように、OnDataTransferイベントが発生すると、開発者は動的プロパティがアップデートされていることが通知される。したがって、開発者は、さらに処理を進めるためターゲットバリューを使用することが可能である。
【0027】
図3は、本発明の一実施形態によるバインディングメカニズムを例示する論理流れ図である。概して、バインディングメカニズムは、バインディングをセットアップするアクションを実行し(ブロック302〜306)、その後、バインディングで特定されているようにターゲットプロパティまたはソースデータバリューの変更に関係するアクションを実行する(ブロック310〜338)。処理は、ブロック302に続く。
【0028】
ブロック302において、作成時に特定された引数(argument)に基づいてバインディングオブジェクトが作成される。簡単に言うと、バインディングオブジェクト252に対する各プロパティ(つまり、図2に示されているプロパティ260〜272)は、作成時に引数として特定されることが可能である。バインディングは、マークアップを通じて、プログラムで、および類似の方法で作成されることが可能である。図4は、バインディングを作成し、プロパティ260〜272を特定する構文例を示している。それぞれの作成方法で、ソースデータ項目、ソースデータ項目内のデータバリューへのパス、ターゲットUIエレメント、およびおUIエレメント上のターゲット動的プロパティを特定する。現在の流れ図には示されていないが、バインディングオブジェクトのプロパティも、アプリケーションプログラミングインターフェース(API)を使用するなどして、実行時に動的に修正されることが可能である。処理はステップ306に進む。
【0029】
ブロック304において、バインディングがアクティブにされる。一実施形態では、バインディングは、バインディングエンジンがソースオブジェクトを存在させる、ターゲットエレメントを表示できる状態にするなど、バインディングに十分なコンテキストがあることを通知した後、自動的にアクティブ化されることが可能である。バインディングエンジンは、バインディングのアクティブ化を認識することを受け持つ。処理は、ブロック304に続く。
【0030】
ブロック306において、特定されたソースプロパティのバリューが見つけられる。一実施形態では、バリューを見つけるためにリフレクションが使用される。リフレクションは、要求されたオブジェクトに関する情報を呼び出し側が取得するために使用する一般的なメカニズムである。この情報は、サポートされているオブジェクト、パブリックプロパティなどを含む。他の実施形態では、データ項目がコレクションである場合、バインディングエンジンは、発見的手法を何度も実行して、現在のレコードまたはデータオブジェクト(コレクション)自体を使用しているかどうかを判別する。第1の発見的手法は、バインディングがプロパティまたはインデクサを参照したときに適用される。このような状況では、コレクションオブジェクト上の対応するプロパティまたはインデクサは、そのようなプロパティまたはインデクサが存在する場合に使用される。それとは別に、コレクションの現在のレコードはデータ項目として使用される。プロパティまたはインデクサが存在しない場合、他の発見的手法が適用される。このような状況では、コレクションオブジェクトは、コレクションオブジェクトは有効である限り、ターゲットプロパティに使用される。そうでない場合、現在のレコードが使用される。ブロック308に進む前に、バインディングでトランスフォームを特定している場合(ブロック307)、トランスフォームがバリューに適用される。トランスフォームの適用については、以下のブロック316に関して詳しく説明されている。処理は、ブロック308に続く。
【0031】
ブロック308において、見つかったバリューは、ターゲットプロパティに割り当てられる。一実施形態では、プロパティの階層保持する役割を持つプロパティエンジンがバリューを割り当てることができる。他の実施形態では、ターゲットプロパティにバリューを割り当てる前に、バリューをトランスフォームするためにバインディングの作成時に特定されたトランスフォームを呼び出すことが可能である。他の精密化では、プロパティエンジンはプロパティに新しいバリューを持つというマークをつけることができる。ブロック302〜308が実行された後、バインディングエンジンは、ターゲットプロパティおよびソースデータバリューを必要に応じてアップデートする用意ができている。一般に、バインディングメカニズムは非同期である。
【0032】
したがって、ブロック308から、処理は2つの非同期パスを辿る。第1のパス(ブロック310〜318)は、ターゲットプロパティをアップデートすることに関連付けられており、第2のパス(ブロック330〜338)は、ソースデータバリューをアップデートすることに関連付けられている。これらのパスのそれぞれについて以下で説明する。第1に、ターゲットプロパティをアップデートする役割を持つパスについて示される。
【0033】
決定ブロック(decision block)310において、バインディングエンジンは、ソースデータバリューおよびターゲットプロパティに関連付けられているバインディングでバインドタイプを一度だけとして特定しているかどうかを判別する。バインドタイプが一度だけの場合、そのバインドに関して処理は完了しており、終了に進む。当業者であれば、バインドタイプが一度だけの場合、バインディングエンジンはソースプロパティの変更イベントをリッスンしないことを理解するであろう。したがって、実際の運用では、バインディングエンジン内のロジックは必ずしも、ブロック310で示されているようにチェックを実行しない。さらに、データ項目がIPropertyChangeを実施しない場合、処理は完了する。しかし、バインドタイプが一度だけでない場合には、処理はブロック312に続く。
【0034】
ブロック312において、バインディングエンジンはバインディングに関連付けられている通知をリッスンする。データバインディングでソースデータバリューを使用してターゲットを直接アップデートしないため、本発明では通知メカニズムを実施する。プロパティ変更通知およびコレクションビュー「CurrentChanged」通知などの通知メカニズムは、当業では知られており、ここではさらに詳しい説明を要しない。異なるアクションにより、データバリュー変更、ページナビゲーション、シャットダウン、データコレクション内の注目するレコードの変更などの通知が実行される。本発明はデータコレクション内の注目するレコードの変更があるとアップデートをトリガするので、本発明は、ユーザインターフェースおよびロジックをさらに分離する便利なメカニズムを備える。例えば、本発明により、開発者は、データコレクション内の注目する次のレコードにどのように変更を加えるかを特定するコードをロジック内に作成するだけでよい。変更が実行されると、バインディングエンジンは、本発明により、すでに特定されているバインディングに基づき、ユーザインターフェースをアップデートする。すでに述べたように、ユーザインターフェースとロジックとのこのような分離により、ユーザインターフェースおよびロジックが相互に関連していたときに比べてアプリケーションはより堅牢になり、また保守も容易になっている。
【0035】
以下のコードは、通知メカニズムの一実施例である。以下で作成されたコード例はC#で書かれているが、当業者であれは、通知メカニズムを実施するためにさまざまな言語および構文が使用されることが可能であることを理解するであろう。このような実施については、各データ項目で使用できるようにインターフェースが定義される。各データ項目は、動的アップデートを実施するためにこのインターフェースを継承する。

Public interface IPropertyChange
{
event PropertyChangedEventHandler PropertyChanged;
}.
【0036】
次に、イベントハンドラ(event handler)およびその引数(argument)が定義される。

public delegate void PropertyChangedEventHandler(object sender, PropertyChangedEventArgs e);

public class PropertyChangedEventArgs:EventArgs
{
public virtual string PropertyName { get ;}
}.
【0037】
クラスPropertyChangedEventArgsは型文字列を持つPropertyNameという名前の読み取り専用プロパティを1つ含む。PropertyNameプロパティは、変更されたプロパティに対する名前を含む。次に、各ソースデータ項目は、そのプロパティの1つが変更された場合に必ず、PropertyChangedデリゲートを呼び出すことによりこのインターフェースを実施する。以下は、通知メカニズムの実施形態により、ソースオブジェクト(例えば、データ項目232)を実施する例である。

public class myClass : IPropertyChange
{
private string foo = "Hello World";
public string Foo
{
get {return foo;}
set {if(foo ! = value)
{
foo = value;
NotifyPropertyChanged("foo");
}
}
public event PropertyChangedEventHandler Property Changed;
private void NotifyPropertyChanged(string propName)
{
PropertyChanged(this, new
PropertyChangedEventArgs(propName));
}
}.
【0038】
上記のコード例に示されているように、「foo」プロパティの「set」メソッドは、新しいバリューが旧いバリューと異なるかどうかを判別する。バリューが異なる場合、ハンドラが呼び出される。PropertyInfoを取得するためリフレクションが実行される。他の精密化では、バインディングエンジンは、リフレクションを通じて取得されたプロパティの型をキャッシュすることができる。したがって、リフレクションは1回実行され、プロパティについて通知が受信される毎に実行されるわけではない。他の精密化では、引数で空文字列が渡され、データ項目のデータバリューのそれぞれに対するすべてのバインディングをアップデートすべきであることを通知することができる。これは、ソースオブジェクトで、どのプロパティが変更され、各バインディングをアップデートしたいかがはっきりしない場合に実行できる。バインディングエンジンが、データソースバリューが変更されたという通知を受信すると、処理は決定ブロック314に進む。
【0039】
決定ブロック314において、変更されたソースデータバリューに関連付けられているバインディングでバインディングに対するトランスフォームを特定していたかどうかを判別する。バインディングでトランスフォームを特定していない場合には、処理はブロック318に続く。しかし、バインディングでトランスフォームを特定している場合には、処理はブロック316に続く。
【0040】
ブロック316において、バインディングで特定されているトランスフォームが実行される。一実施形態では、トランスフォーマ268は後述のようなオブジェクトである。

Public interface IDataTransformer
{
Public object Transform(object o, DynamicProperty dp, CultureInfo c) {;}
}.
【0041】
上記のインターフェースでは、oはソースバリューを表し、dpはターゲットの動的プロパティを表し、cはトランスフォーム時(transfomation)に使用するカルチャー(culture)を表す。Transform()メソッドは、ソースバリューoを型dpの動的プロパティに割り当てるのに適しているオブジェクトにトランスフォームする。Transform()メソッドは、バインディングのソースからターゲットプロパティにデータバリューを伝搬させるとき呼び出される。Transform()メソッドがnullバリューを返した場合、バインディングエンジンに対し、バリューの伝搬を停止することが通知される。
【0042】
トランスフォーマは、さらに、バインディングで特定された関連ソースデータバリューに基づいて幅、高さ、フォント、位置(x、y)などの他のUIプロパティを制御するために使用されることも可能である。トランスフォーマでは、複数の方法でデータを表示するためデータバリューに対しロジックを実行することができる。他の精密化では、カルチャーは、バインディングで特定されているようにトランスフォーム時に適用されることも可能である。処理は、ブロック318に続く。
【0043】
ブロック318において、ターゲットプロパティがアップデートされる。一実施形態では、プロパティエンジンはバリューをターゲットプロパティに割り当てる。さらに、ターゲットプロパティは新しいバリューを持つとマーク付けされることも可能である。その後処理はブロック312に続き、バインディングに関連付けられている次のプロパティ変更通知をリッスンする。アプリケーションが終了するか、またはバインディングが他の何らかの手段により打ち切られると、処理は終わりに進む。
【0044】
上述のように、処理は、ブロック308から第2のパスへと続くことが可能である。したがって、ブロック308から、処理は決定ブロック330に続く。上述のように、決定ブロック310に関して、バインディングエンジン内のロジックは決定ブロック310でバインドタイプのチェックを必ずしも実行することはできないが、むしろ、バインディングエンジンはバインディングが作成されたときに通知をリッスンするように指示されていたため、プロセスは第2のパス内を流れない。しかし、流れの説明を明確にするために、バインドタイプを反映する決定ブロックが示されている。したがって、決定ブロック330において、バインディングが双方向(twoWay)のバインドタイプとして特定したかどうかの判別が行われる。すでに述べたように、双方向では、ターゲットプロパティの変更をソースデータバリューに伝搬させることができる。バインディングで双方向バインドタイプとして特定していない場合、処理は終わりに進む。しかし、バインディングで双方向バインドタイプとして特定している場合には、処理はブロック332に続く。
【0045】
ブロック332において、バインディングエンジンは、ソースデータバリューのアップデートをトリガするいくつかのアクションを認識する。トリガが発生すると、処理は決定ブロック334に続く。
【0046】
決定ブロック334において、バインディングがバインドに対し逆トランスフォームを特定したかどうかの判別が行われる。バインディングで逆トランスフォームを特定していない場合には、処理はブロック338に続く。しかし、バインディングで逆トランスフォームを特定している場合には、処理はブロック336に続く。
【0047】
ブロック336において、逆トランスフォームがソースプロパティに適用される。一実施形態では、逆トランスフォーマは後述のようなオブジェクトである。

Public interface IDataTransformer
{
Public object InverseTransform(object o, PropertyInfo pinfo, CultureInfo c){;}
}.
【0048】
上記のインターフェースでは、oはソースバリューを表し、cはトランスフォーム時に使用するカルチャーを表し、pinfoはターゲットプロパティのPropertyInfoを表す。InverseTransform()メソッドは、ソースバリューoを型infoのプロパティに割り当てるのに適しているオブジェクトにトランスフォームする。このメソッドは、バインディングのターゲットからソースにバリューを伝搬させるとき呼び出される。InverseTransform()メソッドがnullバリューを返した場合、バインディングエンジンはバリューを伝搬しない。InverseTransformが実行されると、処理は決定ブロック338に続く。
【0049】
ブロック338において、アップデートタイプに応じてソースプロパティがアップデートされる。上述のように、アップデートタイプは、即時、フォーカスの喪失、明示的、およびその他をきっかけとしてよい。ソースプロパティがアップデートされた後、処理は終了へ進む。
【0050】
図4は、バインディングを作成するいくつかの例を示している。作成手段(creation means)400〜410では、マークアップを通じてバインディングを作成する。作成手段410では、コードを通じてバインディングを作成する。図4に示されている手段例は網羅的ではない。他の手段(構文)は、本発明の範囲から逸脱することなく、使用されることが可能である。
【0051】
作成手段400は、エレメント424に対しDataContext名/バリューのペア(これ以降、DataContext 422と呼ぶ)およびId名/バリューのペア(これ以降、Id 420と呼ぶ)を含む。作成手段400はさらに、DataContext 422も含むため、Id 420は不要である。Id 420は、マークアップでElementSourceを使用したり、コード内でIdObjectRegを使用したりするなど、明示的なソースを参照するのが望ましい場合に必要である。これらの両方の用途について後で説明される。DataContext 422は、エレメント(例えば、エレメント424)で定義されている動的プロパティである。DataContext 422に関連付けられているバリューは、デフォルトのソースデータ項目を表し、継承可能なプロパティである。バインディングエンジンは、DataContext 422にクエリを実行し、エレメント424および子孫エレメント(例えば、Buttonエレメント426)のバインディングを作成するときにDataContext 422を使用する。バインディングエンジンは、さらに、DataContext 422の変更についてもリッスンするし、そのトリガによりアップデートを実行する。したがって、必要はないけれども、DataContext 422は共通データ項目にバインドされるすべてのプロパティについてスコープを確立する便利なメカニズムを備える。子孫エレメントは、自DataContextを持つことができ、これは親エレメントのDataContext 422に優先する。バインディングは、作成手段402に関して後述するnullでないソースを供給することにより、DataContext 422をオーバーライドすることができる。
【0052】
Buttonエレメント426は、ターゲットプロパティで例示されている(例えば、 Button.Text 428)。本発明では、バインディングエンジンは、「Data:Bind」を見つけると、バインディングが特定されていることを認識する。後の名前/バリューのペアは、図2で特定されているように、バインディングプロパティ260〜272を設定する。当業者であれば、バインディングを示す「Data:Bind」という用語は任意の用語であり、本発明を逸脱することなく用語はいくつ使用されていてもかまわない。作成手段400は、詳細マークアップ形式を表す。
【0053】
作成手段402は、コンパクトマークアップ形式を表す。UIプロパティ(例えば、Button Text)は、さらにコンパクトな方式で表される。ここでもまた、「Data:Bind」は、バインディングエンジンに対し後に続くのがバインディングであることを知らせるシグナルとして使用される。さらに、名前/バリューのペアと後に続く「Data:Bind」は、図2でバインディングオブジェクト250についてすでに説明している所望のプロパティ260〜272に対応する。例えば、ElementSource名/バリューのペア(これ以降ElementSource 434と呼ぶ)はソース266に対応している。
【0054】
マークアップでは、ソースプロパティを設定する方法は、ElementSourceおよびDataSourceの2つがある。これらのいずれも使用されない場合、ソースのデフォルトバリューはnullであり、作成後、エレメントのDataContextプロパティのバリューを取得し、そのバリューをソースオブジェクトとして使用するようバインディングエンジンに通知する。
【0055】
作成手段(例えば、作成手段402)でElementSourceを特定した場合、バインディングエンジンは、ElementSourceプロパティにより特定されているIDを持つエレメントを見つける。その後、エレメントのDataContextisは、ソースオブジェクトとして使用される。/Parent/Parentおよび/Previous/Previousなどの相対パス名は、データソースを特定するために使用されることが可能である。バインディングエンジンは、/Parentを見つけると、オブジェクト階層に関して現在のエレメントの親であるエレメントを探す。例えば、エレメントが顧客注文である場合、/Parentを特定すると、現在の注文に対する顧客に対応するエレメントを探すようにバインディングエンジンに通知することができる。/Parentを特定するのは、内側リピータのスコープ内にある外側リピータからのバリューを使用するのが望ましいネストされているリピータの場合に役立つ。/Previousを特定すると、バインディングエンジンはRepeaterの下にある現在のエレメントの前のエレメントを探す。/Previousを特定するのは、棒グラフなど、現在の項目の他に現在のn項目にアクセスするのが望ましい場合に便利である。連続する/Previousと/Parentは、本発明に従って使用されることが可能である。
【0056】
他の実施形態では、マークアップでDataSourceを特定することができる。DataSourceが特定された場合、バインディングエンジンはResourceのリソースIDを受け入れる。Resourceがデータプロパティを公開する場合、バインディングエンジンは、バインディングのソースを、DataSourceリソースのデータプロパティによって返されるオブジェクトに設定する。そうでない場合、バインディングエンジンはバインディングのソースをリソースオブジェクト自体に設定する。
【0057】
当業者であれば、マークアップ言語を使用してプロパティ260〜272が表現され、したがって、これは他のプロパティのそれぞれがマークアップ言語を使用して表現されることが可能であることを理解するであろうし、ここで詳細には説明しない。
【0058】
次の3つの作成手段404〜410は、本発明でバインドすることができる項目の種類に関して例を与える。作成手段404は、サブプロパティおよびインデクサへのバインディングのサポートを示している。作成手段404は、di.a.b[3].cのようにC#で書かれているバインディングに対応しており、diは関連するデータ項目である。データ項目、di.aを実施するクラス、di.a.bを実施するクラス、およびdi.a.b[3].cを実施するクラスが本発明の通知メカニズム(例えば、IPropertyChange)をサポートし、プロパティが変更されたときに通知する限り、作成手段404を使用して特定されたバインディングにより、バインディングエンジンは自動的にバインドされているプロパティ(例えば、ターゲットプロパティ)をアップデートし、ソースデータバリューの変更を反映する。
【0059】
作成手段406は、データコレクションへのバインディングのサポートを示している。バインディングエンジンは、自動的に、各レベルでコレクションの現在のレコードを使用する(a、b、およびcは異なるレベルを表す)。例えば、di.aがIDataCollection型であれば、バインディングでは、「b」プロパティをフェッチするためにコレクションの現在のレコードを使用する。したがって、バインディングエンジンは、現在のレコードが変更された場合に必ず、データコレクションに関連付けられているバリューを自動的にアップデートする。
【0060】
作成手段408は、XMLノードへのバインディングのサポートを示している。バリューへのパス260は、図4に示されているように、「/Customer/Order[@OrderID=10]/Amount)」などのxpath表現を使用して与えられる。作成手段410は、ADOデータテーブルへのバインディングのサポートを示している。この実施に関しては、バリューへのパス260は、図4に示されているように、「OrderlD」などの特定の行に対するフィールド名として与えられる。
【0061】
作成手段410では、プログラムによりバインディングを作成する。開発者は、バインディングでソースデータ項目として使用しなければならないオブジェクトへのobjectrefを用意する。作成手段412に示されているプログラムのステートメントは、作成手段410により例示されているのと同じ動作でバインディングを作成する。SetBindingメソッドは、プログラマが上述のバインディングプロパティを特定する際に使用できるより精巧な変更形態を多数備える。上の単純な例では、ボタンのDataContextをソースオブジェクトとして使用する。以下のプログラムのステートメントは、特定のオブジェクト(実行時に知られる)をソースとして使用する単方向バインディングを作成する。

Object source = ... 何らかの任意のオブジェクト ...;
Binding.SetBinding(myButton, Element.BackgroundProperty, "Color", BindType.OneWay, new ExplicitObjectRef(source));
【0062】
以下のコード例は、本発明のバインディングメカニズムを介してデータによりユーザインターフェースプロパティを制御するための一実施を示している。この例では、データバリュー(例えば、myInteger)およびUIプロパティ(例えば、TextContent)は、バインディングとしてアクティブ化にされる。さらに、トランスフォーム(例えば、MyTranformer)は、このバインディングに対して特定される。

<Test TextContent="*Data:Bind(Path=myInteger)"
Foreground="*Data:Bind(Path=MyInteger;
Transformer=MyTransformer)"/>

public class MyTransformer:IDataTransformer
{
public object Transform(object o, DynamicProperty dp, CultureInfo culture)
{
if ((int)o <0) return Red;
else return Black;
}
public object InverseTransform(object o, PropertyInfo info, CultureInfo culture)
{
return null;
}
}.
【0063】
したがって、説明したように、本発明は、ユーザインターフェースおよびロジックのコーディングの変更が分離されるようにソースデータバリューをターゲットプロパティに関連付けるメカニズムを備える。したがって、本発明により、開発者はアプリケーションの基本ロジックを修正することなく、ユーザインターフェースを容易に修正し、機能強化することができる。
【0064】
上記の明細、実施例、およびデータにより、本発明の構成の製造および使用に関する説明が完全になされている。本発明の多くの実施形態は、本発明の精神と範囲を逸脱することなく実施できるため、本発明は付属の請求項によって定められる。

【特許請求の範囲】
【請求項1】
1つ又は複数のユーザインターフェースプロパティをそれぞれ含むユーザインターフェースエレメントを有するユーザインターフェース部分と、ソースデータバリューを操作するように構成されたロジック部分とを備えるコンピュータ実行可能プログラムを格納したコンピュータ可読記録媒体であって、前記プログラムは、記憶手段を備えるコンピュータに
前記ユーザインターフェース部分のユーザインターフェースプロパティを前記記憶手段に記憶されたソースデータバリューと関係付けるバインディングを作成するステップと、
前記バインディングのバインディングオブジェクトであって、前記ソースデータバリューを特定するための方法を含むパスと、バインディングのタイプを定義するバインディングタイプと、前記ユーザインターフェースプロパティに対するアップデートが発生した時期を特定するアップデートタイプと、前記ソースデータバリューをトランスフォームするための規則を特定するためのカルチャープロパティとを含むバインディングプロパティを有するバインディングオブジェクトを作成するステップと、
前記ソースデータバリューが変更された通知を受けたとき、当該ソースデータバリューに係る前記バインディングオブジェクトに基づいて前記ユーザインターフェースプロパティに前記変更を反映させるステップと、を実行させ、
前記バインディングタイプは、前記ソースデータバリューを編集不可能な前記ユーザインターフェースプロパティに前記バインディングにより関係付ける場合に使用される「単方向」、又は前記ソースデータバリューを編集可能な前記ユーザインターフェースプロパティに前記バインディングにより関係付ける場合に使用される「双方向」を含み、
前記受ける通知は、前記変更されたソースデータバリューに係る前記バインディングオブジェクトの前記バインディングタイプに基づいていること
を特徴とするコンピュータ可読記録媒体。
【請求項2】
前記ユーザインターフェースプロパティに前記変更を反映させる前に、前記カルチャープロパティに基づいて前記ソースデータバリューをトランスフォームすることを特徴とする請求項1に記載のコンピュータ可読記録媒体。
【請求項3】
前記プログラムは、前記コンピュータに
前記ユーザインターフェースプロパティが変更されたときに、前記ソースデータバリューを更新するステップを実行させること
を特徴とする請求項1又は請求項2に記載のコンピュータ可読記録媒体。
【請求項4】
前記ソースデータバリューを更新するステップは、前記ユーザインターフェースプロパティの変更の後に非同期で実行されることを特徴とする請求項3に記載のコンピュータ可読記録媒体。
【請求項5】
前記ソースデータバリューを更新するステップは、前記ユーザインターフェースエレメントに対するフォーカスが失われた後に非同期で実行されることを特徴とする請求項3に記載のコンピュータ可読記録媒体。
【請求項6】
前記作成されたバインディングは、コードを使用して特定されることを特徴とする請求項1から請求項5のいずれか1つに記載のコンピュータ可読記録媒体。
【請求項7】
前記作成されたバインディングは、マークアップ言語を使用して特定されることを特徴とする請求項1から請求項5のいずれか1つに記載のコンピュータ可読記録媒体。
【請求項8】
前記プログラムは、前記コンピュータに
前記ユーザインターフェースプロパティを他のソースデータバリューに関連付ける他のバインディングを作成するステップを実行させること
を特徴とする請求項1に記載のコンピュータ可読記録媒体。
【請求項9】
前記ソースデータバリューは、前記記憶手段から、XML上のXPath、ADOのカラム、およびリフレクションのうちの1つを通じて特定されることを特徴とする請求項1から請求項8のいずれか1つに記載のコンピュータ可読記録媒体。
【請求項10】
1つ又は複数のユーザインターフェースプロパティをそれぞれ含むユーザインターフェースエレメントを有するユーザインターフェース部分と、
ソースデータバリューを操作するように構成されたロジック部分と、
記憶手段と、
前記ユーザインターフェース部分のユーザインターフェースプロパティを前記記憶手段に記憶されたソースデータバリューと関係付けるバインディングを作成する手段と、
前記バインディングのバインディングオブジェクトであって、前記ソースデータバリューを特定するための方法を含むパスと、バインディングのタイプを定義するバインディングタイプと、前記ユーザインターフェースプロパティに対するアップデートが発生した時期を特定するアップデートタイプと、前記ソースデータバリューをトランスフォームするための規則を特定するためのカルチャープロパティとを含むバインディングプロパティを有するバインディングオブジェクトを作成する手段と、
前記ソースデータバリューが変更された通知を受けたとき、当該ソースデータバリューに係る前記バインディングオブジェクトに基づいて前記ユーザインターフェースプロパティに前記変更を反映させる手段とを備え、
前記バインディングタイプは、前記ソースデータバリューを編集不可能な前記ユーザインターフェースプロパティに前記バインディングにより関係付ける場合に使用される「単方向」、又は前記ソースデータバリューを編集可能な前記ユーザインターフェースプロパティに前記バインディングにより関係付ける場合に使用される「双方向」を含み、
前記受ける通知は、前記変更されたソースデータバリューに係る前記バインディングオブジェクトの前記バインディングタイプに基づいていること
を特徴とするコンピュータシステム。
【請求項11】
前記ユーザインターフェースプロパティに前記変更を反映させる前に、前記カルチャープロパティに基づいて前記ソースデータバリューをトランスフォームすることを特徴とする請求項10に記載のコンピュータシステム。
【請求項12】
前記ユーザインターフェースプロパティが変更されたときに、前記ソースデータバリューを更新する手段を備えることを特徴とする請求項10又は請求項11に記載のコンピュータシステム。
【請求項13】
前記ソースデータバリューを更新する手段は、前記ユーザインターフェースプロパティの変更の後に非同期で実行されることを特徴とする請求項12に記載のコンピュータシステム。
【請求項14】
前記ソースデータバリューを更新する手段は、前記ユーザインターフェースエレメントに対するフォーカスが失われた後に非同期で実行されることを特徴とする請求項12に記載のコンピュータシステム。
【請求項15】
前記作成されたバインディングは、コードを使用して特定されることを特徴とする請求項10から請求項14のいずれか1つに記載のコンピュータシステム。
【請求項16】
前記作成されたバインディングは、マークアップ言語を使用して特定されることを特徴とする請求項10から請求項14のいずれか1つに記載のコンピュータシステム。
【請求項17】
前記ユーザインターフェースプロパティを他のソースデータバリューに関連付ける他のバインディングを作成する手段を備えることを特徴とする請求項10に記載のコンピュータシステム。
【請求項18】
前記ソースデータバリューは、前記記憶手段から、XML上のXPath、ADOの列、およびリフレクションのうちの1つを通じて特定されることを特徴とする請求項10から請求項17のいずれか1つに記載のコンピュータシステム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate


【公開番号】特開2009−151810(P2009−151810A)
【公開日】平成21年7月9日(2009.7.9)
【国際特許分類】
【出願番号】特願2009−32012(P2009−32012)
【出願日】平成21年2月13日(2009.2.13)
【分割の表示】特願2005−500405(P2005−500405)の分割
【原出願日】平成15年5月17日(2003.5.17)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.EEPROM
【出願人】(500046438)マイクロソフト コーポレーション (3,165)
【Fターム(参考)】