(57)【要約】【課題】  データバインディングエンジンを使用してコマンドバインディングを行う。【解決手段】  データバインディングエンジンは、ボタン、メニュー、リストボックスなどのユーザインターフェイスコントロールをアプリケーションモデルに提示されたコマンドにバインドする。データソースおよびデータバインディングパスは、コマンドがどのようにＵＩ要素にバインドされるかを定義するマークアップ言語で指定することができる。【選択図】  図５
2005301993.tif 000002
【特許請求の範囲】
【請求項１】
コマンドをターゲットの要素にマッピングする少なくとも１つのバインディングステートメントを受信し、前記少なくとも１つのバインディングステートメントを評価し、前記ターゲット要素を前記コマンドに関連付けられている値に更新するデータバインディングエンジンを含むことを特徴とするソースとターゲットとの間の前記コマンドをバインドするシステム。
【請求項２】
前記コマンドはコマンドオブジェクトであることを特徴とする請求項１に記載のシステム。
【請求項３】
前記コマンドは状態に関連付けられていることを特徴とする請求項１に記載のシステム。
【請求項４】
前記コマンド状態は前記ソースから導出されることを特徴とする請求項３に記載のシステム。
【請求項５】
前記コマンド状態は実行可能に関連付けられていることを特徴とする請求項３に記載のシステム。
【請求項６】
前記コマンド状態は実行不可に関連付けられていることを特徴とする請求項３に記載のシステム。
【請求項７】
前記コマンドは状態を持たないことを特徴とする請求項１に記載のシステム。
【請求項８】
前記コマンドはメソッドであることを特徴とする請求項１に記載のシステム。
【請求項９】
前記少なくとも１つのバインディングステートメントは宣言マークアップ言語によるステートメントを含むことを特徴とする請求項１に記載のシステム。
【請求項１０】
前記宣言マークアップ言語はＨＴＭＬ、ＸＭＬ、またはＸＡＭＬを含むことを特徴とする請求項９に記載のシステム。
【請求項１１】
前記少なくとも１つのバインディングステートメントはデータソースの指示を含むことを特徴とする請求項１に記載のシステム。
【請求項１２】
前記少なくとも１つのバインディングステートメントはバインディングパスを含むことを特徴とする請求項１に記載のシステム。
【請求項１３】
前記データバインディングエンジンは、少なくとも第１のオブジェクトおよび第２のオブジェクトを含むオブジェクトのグラフに向けてクエリを行い、前記第１のオブジェクトは前記第２のオブジェクトを指すことを特徴とする請求項１に記載のシステム。
【請求項１４】
前記第２のオブジェクトはコマンドオブジェクトであることを特徴とする請求項１３に記載のシステム。
【請求項１５】
前記コマンドは実行可能メソッドに関連付けられているオブジェクト、および実行すべき前記コマンドオブジェクトに関連付けられている実行メソッドの実行可能または実行不可に関連付けられているブール状態を含むことを特徴とする請求項１に記載のシステム。
【請求項１６】
前記ターゲットはユーザインターフェイスであることを特徴とする請求項１に記載のシステム。
【請求項１７】
前記ソースは基礎を成すアプリケーションの状態の集まりであることを特徴とする請求項１に記載のシステム。
【請求項１８】
前記コマンドと前記ターゲットとの間のマッピングを定義する少なくとも１つのバインディングステートメントを受信するステップと、
前記コマンドの値を決定するステップと、
前記ターゲットを前記コマンドの前記値に更新するステップと
を含むことを特徴とするコマンドをターゲットにマッピングする方法。
【請求項１９】
前記少なくとも１つのバインディングステートメントを評価できないとの決定に応答して、前記コマンドの前記値はｎｕｌｌに設定されることを特徴とする請求項１８に記載の方法。
【請求項２０】
前記少なくとも１つのバインディングステートメントを評価できないとの決定に応答して、前記コマンドの前記値はデフォルトの値に設定されることを特徴とする請求項１８に記載の方法。
【請求項２１】
前記コマンドの前記値がｎｕｌｌであるとの決定に応答して、前記ターゲットは使用不可であることを特徴とする請求項１８に記載の方法。
【請求項２２】
前記コマンドは状態に関連付けられているオブジェクトであることを特徴とする請求項１８に記載の方法。
【請求項２３】
前記コマンド状態はデータソースから導出されることを特徴とする請求項２２に記載の方法。
【請求項２４】
前記コマンド状態は実行可能に関連付けられていることを特徴とする請求項２２に記載の方法。
【請求項２５】
前記コマンドは状態を持たないことを特徴とする請求項１８に記載の方法。
【請求項２６】
前記コマンドはメソッドであることを特徴とする請求項１８に記載の方法。
【請求項２７】
データソースを含むオブジェクトの集まりを変更通知について監視するステップをさらに含むことを特徴とする請求項１８に記載の方法。
【請求項２８】
前記変更通知の検出に応答して、前記データソースのオブジェクトのグラフに向けてクエリを行って前記コマンドの更新された値を決定するステップをさらに含むことを特徴とする請求項２７に記載の方法。
【請求項２９】
前記コマンドにマッピングされた前記ターゲットを前記コマンドの前記更新された値に更新するステップをさらに含むことを特徴とする請求項２８に記載の方法。
【請求項３０】
前記少なくとも１つのバインディングステートメントはマークアップ言語による宣言ステートメントを含むことを特徴とする請求項１８に記載の方法。
【請求項３１】
前記マークアップ言語はＨＴＭＬであることを特徴とする請求項３０に記載のシステム。
【請求項３２】
前記マークアップ言語はＸＭＬであることを特徴とする請求項３０に記載のシステム。
【請求項３３】
前記マークアップ言語はＸＡＭＬであることを特徴とする請求項３０に記載のシステム。
【請求項３４】
前記ターゲットはユーザインターフェイスの要素であることを特徴とする請求項１８に記載のシステム。
【請求項３５】
データソースのコマンドとユーザインターフェイスの要素との間のマッピングを定義する少なくとも１つのバインディングステートメントを受信し、
前記コマンドの値を決定し、
前記ユーザインターフェイスの前記要素を前記コマンドの前記値に更新する
コンピュータ実行可能命令を含むことを特徴とするコンピュータ可読媒体。
【請求項３６】
前記データソースを含むオブジェクトの集まりを変更通知について監視するコンピュータ実行可能命令をさらに含むことを特徴とする請求項３５に記載のコンピュータ可読媒体。
【請求項３７】
前記変更通知を検出し、
前記データソースのオブジェクトのグラフに向けてクエリを行って前記コマンドの更新された値を決定する
コンピュータ実行可能命令をさらに含むことを特徴とする請求項３６に記載のコンピュータ可読媒体。
【請求項３８】
前記コマンドに関連付けられている前記ユーザインターフェイス要素を前記コマンドの前記更新された値に更新するコンピュータ実行可能命令をさらに含むことを特徴とする請求項３７に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はコンピュータ処理に関し、より詳細にはデータバインディング（ｄａｔａ  ｂｉｎｄｉｎｇ）機構を使用したコマンドバインディング（ｃｏｍｍａｎｄ  ｂｉｎｄｉｎｇ）に関する。
【背景技術】
【０００２】
アプリケーションプログラムのコードは、ユーザインタラクションの層、つまり１組の「ビュー」（ｖｉｅｗｓ）またはユーザインターフェイス（ＵＩ）、およびしばしば１組の「モデル」によって実現される、内部のアプリケーションロジックおよびデータ管理を実装する層に分けられることが多い。ユーザインターフェイスは一般に、モデルに実装された機能を呼び出すメニュー項目および他のＵＩ要素を含む。
【０００３】
一般に、グラフィックデザイナーは、ユーザインターフェイスの外見を設計し、開発者は、ユーザインターフェイスおよび／または基礎を成すモデルを実装するコードを書く。グラフィックデザインおよびソフトウェア開発は、非常に異なる２つの専門分野であり、デザイナーおよび開発者が生産的にいっしょに働くことは難しいことが多い。一般に、デザイナーは、Ａｄｏｂｅ（登録商標）  Ｐｈｏｔｏｓｈｏｐ（登録商標）、およびＡｄｏｂｅ（登録商標）  Ｉｌｌｕｓｔｒａｔｏｒ（登録商標）などのグラフィックツールを使用して、ユーザインターフェイス（ＵＩ）の原寸大の模型を作成し、次いで開発者は、ＵＩをコードで再実装する。元のグラフィックデザイン要素は、一般に最後の実装では再利用されず、時として設計の一部がその過程で失われることがある。というのは、開発者は、設計をコードで容易に作成し直すことができない、またはその設計を完全には理解できないからである。設計が変更された場合、デザイナーは、ＵＩを作成し直すことが求められ、開発者は、設計に一致させるためにコードの一部を書き直す必要がある可能性がある。一言で言えばこのプロセスは要領が悪い。
【０００４】
こうしたアプリケーションを構築するときに直面する別の問題は、機能、つまりコマンドをどのように提示（ｅｘｐｏｓｅ）し、その機能をどのようにＵＩの要素にマッピングし、またはバインド（ｂｉｎｄ）するかである。例えば、テキスト処理アプリケーションは、選択されたテキストを切り取る機能を提示することができる。例えば文書は「切り取り」コマンドを呼び出す方法を提示するなど、この機能が「コマンド」として提示される。プログラムコードは、ＵＩで何が起こるかと基礎を成すデータに何が起こるかとの間の関係を結び付ける、つまりコマンドをメニュー項目にどのようにバインドするかを定義することが求められる。
【０００５】
従来、イベントハンドラまたはコマンドルーティングを使用してこのタスクを行っていた。イベントハンドラは、コードおよびＵＩ要素をバインドする直接的な方法を提供する。ＵＩ要素は、イベント宣言、例えばメニュー項目の「クリック」などを提示し、モデルはイベント宣言の署名に一致するメソッド、例えばイベントハンドラなどを実装することができる。しかしこの機能は、柔軟性があまり高くない。上記の例でのアクティブな文書など、アクティブなデータモデルの変更、または「切り取り」コマンドが非アクティブまたは使用不可になるなどのコマンド状態の変更は、一般に、イベントハンドラを結び付け、切り離し、ユーザインターフェイスの状態を更新するために、開発者によって追加のコードが書かかれる必要がある。
【０００６】
コマンド処理における柔軟性を必要とする高度なアプリケーションは、一般に、ＵＩ要素に関連付けられているコマンドごとに識別子（ＩＤ）を割り当てる。こうしたシステムは、通常、コマンドＩＤを現在アクティブなコマンドの実装にマッピングする、時としてコマンドマネージャとも呼ばれる中央サービスを有する。コマンドマネージャは、１組のアクティブなコマンドターゲット、すなわちコマンドを提示する１組のモデルを処理する。コマンドを実行するために、識別子がＵＩからコマンドマネージャに送信され、コマンドマネージャは、受信されたＩＤに関するコマンドを処理しているコマンドターゲットを見つけ、そのターゲットのコマンドを呼び出す。残念ながらこの機構はかえって複雑で、習得するのが難しい。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
アプリケーションモデルに提示されるコマンドにＵＩ要素を結び付ける簡単で柔軟性が高い方法があれば有用となる。また、デザイナーおよび開発者にとってソフトウェア開発処理を簡単に行うことができるようになる場合は有用となる。
【課題を解決するための手段】
【０００８】
データバインディングエンジンを使用してコマンドバインディングを行う。データバインディングエンジンは、ボタン、メニュー、リストボックスなどのユーザインターフェイスコントロールを、アプリケーションモデル上に提示されたコマンドにバインドする。本発明の一部の実施形態では、コマンドバインディングは、マークアップ言語で宣言的に指定される。データバインディングパスおよびデータソースは、コマンドがＵＩ要素にどのようにバインドされるかを定義するマークアップで指定することができる。
【０００９】
上記の概要、および次の実施形態例の詳細な説明は、添付の図面と併せ読めばよりよく理解される。本発明を説明するために本発明の構成例を図面に示しているが、本発明は、開示された特定の方法および手段に限定されない。
【発明を実施するための最良の形態】
【００１０】
（概要）
テキスト処理アプリケーションは、選択されたテキストを切り取る機能を提示するいくつかの文書オブジェクトを処理すると仮定する。アプリケーションは、「編集」メニュー上の「切り取り」とラベル付けされたメニュー項目を備え得る。アプリケーションは、「切り取り」コマンドがどのようにメニュー項目、およびアクティブな文書にバインドされるかを定義する必要がある。コマンドバインディングの従来の方法は複雑で、デザイナー／開発者の対話に固有の問題に拍車をかける。本発明の一部の実施形態によれば、コマンドバインディングは、データバインディングコマンドパスをユーザインターフェイスの要素または構成要素に宣言的に関連付け、コマンドプロパティが変わったときに変更通知を送信し、オブジェクトバインディング機構によって自動的にターゲットを更新することによって達成され、それによって複雑度、およびコマンドバインディングおよびルーティングの技術的な専門知識の必要性を低減する。
【００１１】
（コンピューティング環境例）
図１および次の説明は、本発明を実施するのに適したコンピューティング環境の簡単な概説を提供するためのものである。しかし、本発明とともに使用するためにあらゆる種類のハンドヘルド、ポータブル、および他のコンピューティング装置が含まれることを理解されたい。以下では汎用コンピュータについて説明しているが、これは一例であり、本発明が必要とするのは、ネットワークサーバの相互運用性および対話を有するシンクライアント（ｔｈｉｎ  ｃｌｉｅｎｔ）のみである。したがって本発明は、ほんのわずかの、または最低限のクライアントリソースが関与するネットワーク式ホストサービス（ｎｅｔｗｏｒｋｅｄ  ｈｏｓｔｅｄ  ｓｅｒｖｉｃｅｓ）の環境、例えばクライアント装置が単にブラウザまたはインターフェイスとしてＷＷＷにサービスを提供するネットワーク式環境などで使用することができる。
【００１２】
必須ではないが、本発明は、開発者による使用のためにアプリケーションプログラミングインターフェイス（ＡＰＩ）を介して実施され、かつ／またはネットワークブラウジングソフトウェア内に含めることができる。これについては、クライアントワークステーション、サーバ、または他の装置など１つまたは複数のコンピュータによって実行されるプログラムモジュールなどコンピュータ実行可能命令の一般の文脈で説明する。一般にプログラムモジュールは、特定のタスクを実行する、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、構成要素、データ構造などを含む。一般に、プログラムモジュールの機能を、様々な実施形態で必要に応じて結合し、分散することができる。さらに、本発明を他のコンピュータシステム構成で実施できることを当業者であれば理解されよう。本発明との使用に適したよく知られている他のコンピューティングシステム、環境、および／または構成の例には、それだけには限定されないが、パーソナルコンピュータ（ＰＣ）、現金自動預入支払機、サーバコンピュータ、ハンドヘルドまたはラップトップ装置、マルチプロセッサシステム、マイクロプロセッサベースのシステム、プログラム可能家庭用電化製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータなどがある。また、本発明は、タスクが通信ネットワークまたは他のデータ通信媒体によってリンクされているリモート処理装置によって実行される分散コンピューティング環境でも実施することができる。分散コンピューティング環境では、プログラムモジュールを、メモリ記憶装置を含むローカルおよびリモートのコンピュータ記憶媒体に置くことができる。
【００１３】
したがって図１は、本発明を実施するのに適したコンピューティングシステム環境１００の一例を示しているが、上記で明らかにしたように、コンピューティングシステム環境１００は、適したコンピューティング環境の一例にすぎず、本発明の使用または機能の範囲に関して制限を示唆するものではない。また、コンピューティング環境１００を、動作環境１００の例に示した構成要素のいずれか１つ、またはその組み合わせに関連する依存性または必要条件を有しているものと解釈すべきではない。
【００１４】
図１を参照すると、本発明を実施するシステムの例は、汎用コンピューティング装置をコンピュータ１１０の形で含んでいる。コンピュータ１１０の構成要素は、それだけには限定されないが、処理ユニット１２０、システムメモリ１３０、およびシステムメモリを含む様々なシステム構成要素を処理ユニット１２０に結合するシステムバス１２１を含み得る。システムバス１２１は、様々なバスアーキテクチャのうちの任意のものを使用するメモリバスまたはメモリコントローラ、周辺バス、およびローカルバスを含むいくつかの種類のバス構造のうちどんなものでもよい。こうしたアーキテクチャには、それだけには限定されないが一例として、業界標準アーキテクチャ（ＩＳＡ）バス、マイクロチャネルアーキテクチャ（ＭＣＡ）バス、拡張ＩＳＡ（ＥＩＳＡ）バス、ビデオ電子装置規格化協会（ＶＥＳＡ）ローカルバス、およびメザニンバスとしても知られている周辺部品相互接続（ＰＣＩ）バスなどがある。
【００１５】
コンピュータ１１０は、一般に様々なコンピュータ可読媒体を含む。コンピュータ可読媒体は、コンピュータ１１０からアクセスできる使用可能な任意の媒体とすることができ、揮発性および不揮発性媒体、脱着式および固定式媒体を含む。コンピュータ可読媒体は、それだけには限定されないが一例として、コンピュータ記憶媒体および通信媒体を含み得る。コンピュータ記憶媒体には、コンピュータ可読命令、データ構造、プログラムモジュール、他のデータなど、情報を記憶するための任意の方法または技術で実施される揮発性および不揮発性の脱着式および固定式媒体がある。コンピュータ記憶媒体には、それだけには限定されないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）または他の光ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置または他の磁気記憶装置、または所望の情報の格納に使用でき、コンピュータ１１０からアクセスできる他の任意の媒体などがある。通信媒体は一般に、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータを搬送波または他の移送機構などの変調されたデータ信号に組み込む。これには任意の情報配送媒体がある。「変調されたデータ信号」という用語は、信号に情報を符号化するように１つまたは複数のその特性が設定または変更された信号を意味する。通信媒体には、それだけには限定されないが一例として、有線ネットワーク、直接配線された接続などの有線媒体、および音響、ＲＦ、赤外線、その他の無線媒体などの無線媒体がある。また、上記のどんな組合せでもコンピュータ可読媒体の範囲内に含まれるものとする。
【００１６】
システムメモリ１３０は、読取り専用メモリ（ＲＯＭ）１３１やランダムアクセスメモリ（ＲＡＭ）１３２など、揮発性および／または不揮発性メモリの形のコンピュータ記憶媒体を含む。基本入出力システム１３３（ＢＩＯＳ）は、例えば起動中など、コンピュータ１１０内の要素間での情報の転送を助ける基本ルーチンを含み、一般にＲＯＭ１３１に格納されている。ＲＡＭ１３２は一般に、処理ユニット１２０から直接アクセス可能な、かつ／または処理ユニット１２０が現在処理しているデータおよび／またはプログラムモジュールを含む。図１は、それだけには限定されないが一例として、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７を示している。
【００１７】
コンピュータ１１０は、他の脱着式／固定式、揮発性／不揮発性コンピュータ記憶媒体を含むこともできる。一例にすぎないが、図１は、固定式不揮発性磁気媒体から読み取り、あるいはそこに書き込むハードディスクドライブ１４１、脱着式不揮発性磁気ディスク１５２から読み取り、あるいはそこに書き込む磁気ディスクドライブ１５１、およびＣＤ−ＲＯＭや他の光媒体など、脱着式不揮発性光ディスク１５６から読み取り、あるいはそこに書き込む光ディスクドライブ１５５を示している。動作環境の例で使用できる他の脱着式／固定式、揮発性／不揮発性コンピュータ記憶媒体には、それだけには限定されないが、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、半導体ＲＡＭ、半導体ＲＯＭなどがある。ハードディスクドライブ１４１は一般に、インターフェイス１４０などの固定式メモリインターフェイスを介してシステムバス１２１に接続され、磁気ディスクドライブ１５１および光ディスクドライブ１５５は一般に、インターフェイス１５０などの脱着式メモリインターフェイスによってシステムバス１２１に接続される。
【００１８】
上述し、図１に示したドライブおよびその関連のコンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、およびコンピュータ１１０の他のデータの記憶を提供する。図１では例えば、ハードディスクドライブ１４１は、オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７を格納するものとして示されている。これらの構成要素は、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７と同じであっても、異なっていてもよいことに留意されたい。オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７は少なくとも異なるコピーであることを示すために、ここではそれらに異なる番号を付している。ユーザは、キーボード１６２、および一般にマウス、トラックボール、またはタッチパッドと呼ばれるポインティング装置１６１などの入力装置を介してコマンドおよび情報をコンピュータ１１０に入力することができる。図には示していないが他の入力装置には、マイクロフォン、ジョイスティック、ゲームパッド、衛星パラボラアンテナ、スキャナなどがある。これらおよび他の入力装置は、しばしばシステムバス１２１に結合されているユーザ入力インターフェイス１６０を介して処理ユニット１２０に接続されるが、パラレルポート、ゲームポート、ユニバーサルシリアルバス（ＵＳＢ）など他のインターフェイスおよびバス構造で接続してもよい。
【００１９】
モニタ１９１または他のタイプの表示装置もまた、ビデオインターフェイス１９０などのインターフェイスを介してシステムバス１２１に接続される。Ｎｏｒｔｈｂｒｉｄｇｅなどのグラフィックインターフェイス１８２をシステムバス１２１に接続してもよい。Ｎｏｒｔｈｂｒｉｄｇｅは、ＣＰＵまたはホスト処理ユニット１２０と通信するチップセットであり、高速グラフィックポート（ＡＧＰ）通信の役割を担う。１つまたは複数のグラフィック処理ユニット（ＧＰＵ）１８４はグラフィックインターフェイス１８２と通信することができる。この点で、ＧＰＵ１８４は一般に、レジスタ記憶装置などのオンチップメモリ記憶装置を含み、ビデオメモリ１８６と通信する。しかし、ＧＰＵ１８４はコプロセッサの一例にすぎず、したがって様々なコプロセッシング装置をコンピュータ１１０に含めることができる。モニタ１９１または他のタイプの表示装置もまた、ビデオインターフェイス１９０などのインターフェイスを介してシステムバス１２１に接続される。ビデオインターフェイスは、ビデオメモリ１８６と通信する。コンピュータは、モニタ１９１に加えて、出力周辺インターフェイス１９５を介して接続できるスピーカ１９７、プリンタ１９６などの他の周辺出力装置を含むこともできる。
【００２０】
コンピュータ１１０は、リモートコンピュータ１８０など１つまたは複数のリモートコンピュータへの論理接続を使用してネットワーク式環境で動作することができる。リモートコンピュータ１８０は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピア装置、または他の一般のネットワークノードでよく、一般にコンピュータ１１０に関連して上述した多くまたはすべての要素を含むが、図１にはメモリ記憶装置１８１のみを示している。図１に示した論理接続は、ローカルエリアネットワーク（ＬＡＮ）１７１および広域ネットワーク（ＷＡＮ）１７３を含むが、他のネットワークを含んでいてもよい。こうしたネットワーキング環境は、オフィス、全社規模のコンピュータネットワーク、イントラネット、およびインターネットではごく一般的である。
【００２１】
ＬＡＮネットワーキング環境で使用する場合、コンピュータ１１０は、ネットワークインターフェイスまたはアダプタ１７０を介してＬＡＮ１７１に接続される。ＷＡＮネットワーキング環境で使用する場合、コンピュータ１１０は一般に、モデム１７２、またはインターネットなどＷＡＮ１７３を介して通信を確立する他の手段を含む。モデム１７２は、内蔵のものでも外付けのものでもよく、ユーザ入力インターフェイス１６０または他の適切な機構を介してシステムバス１２１に接続することができる。ネットワーク式環境では、コンピュータ１１０に関連して示したプログラムモジュール、またはその一部をリモートメモリ記憶装置に格納することができる。図１は、それだけには限定されないが一例として、リモートアプリケーションプログラム１８５をメモリ装置１８１上に存在するものとして示している。図示したネットワーク接続は例であり、コンピュータ間の通信リンクを確立する他の手段を使用してもよいことは理解されよう。
【００２２】
コンピュータ１１０または他のクライアント装置をコンピュータネットワークの一部として配置できることを当業者であれば理解できよう。この点で、本発明は、任意の数のメモリまたは記憶ユニット、および任意の数の記憶ユニットまたはボリュームにわたって行われる任意の数のアプリケーションおよびプロセスを有する任意のコンピュータシステムに関連する。本発明は、リモートまたはローカルの記憶装置を有する、ネットワーク環境で配置されたサーバコンピュータおよびクライアントコンピュータを含む環境に適用し得る。また本発明は、プログラミング言語機能、解釈機能、および実行機能を有するスタンドアロンコンピューティング装置にも適用し得る。
【００２３】
（データバインディング機構を使用してコマンドバインディングを行うためのシステムおよび方法）
図２は、本発明の一部の実施形態によるデータバインディング機構を使用してコマンドバインディングを行うためのシステム例を示している。こうしたシステムは、図２のコンピュータ例２０２など、全部または一部、１つまたは複数のコンピュータに存在し得る。コンピュータ２０２は、図１に関して説明したコンピュータ１１０などのコンピュータを含み得る。データバインディングエンジンを使用してコマンドを経路指定するシステムは、データバインディング構成要素２０８、ソース２０６、およびターゲット２０３の要素のうちの１つまたは複数を含み得る。
【００２４】
本発明の一部の実施形態では、データバインディング構成要素２０８は、ソースオブジェクト例２１０ａ、２１０ｂなどのソースオブジェクトのコマンドオブジェクト２１２ａの、ターゲットオブジェクト例２０４ａ、２０４ｂなどのターゲットオブジェクトへの動的なバインディングを可能にするデータバインディングエンジン２０８である。データバインディングエンジンは、ソースオブジェクトコマンドプロパティへの変更が関連のターゲットオブジェクトプロパティに自動的に反映されるように、オブジェクトのプロパティ変更通知をリッスンすることができる。データバインディングエンジンは、ソースオブジェクト非コマンドプロパティへの変更が関連のターゲットオブジェクトプロパティに自動的に反映されるように、オブジェクトのプロパティ変更通知をリッスンすることができ、またその逆も可能である。ターゲットオブジェクトは、データソースに関連付けることができ、ターゲットオブジェクトがバインドされるソースを識別する。データバインディングエンジンは、プロパティパスの評価をサポートして、ターゲットの特定の部分をソースの特定の部分にバインドすることができる。本発明の一部の実施形態では、ターゲットオブジェクトプロパティのソースオブジェクトコマンドプロパティへのバインドは、ＨＴＭＬ（ハイパーテキストマークアップ言語）、ＸＭＬ（拡張可能マークアップ言語）、ＸＡＭＬ（ｅＸｔｅｎｓｉｂｌｅ  Ａｐｐｌｉｃａｔｉｏｎ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）、または他の適したマークアップ言語などのマークアップ言語で宣言的に行うことができる。データバインディングエンジンは、ターゲットオブジェクトのデータソースのソースオブジェクトコマンドプロパティを検索し、適切な更新を行うことができる。
【００２５】
本発明の一部の実施形態では、１つ、一部、またはすべてのオブジェクトが他のオブジェクトを指すオブジェクト指向オブジェクトのグラフが生成され、グラフにおける１つのオブジェクトから別のオブジェクトを指す各矢印がプロパティを表す。図６にオブジェクト指向オブジェクトのグラフ例を示している。図６では、オブジェクト６０２は、文書マネージャオブジェクトを表し、オブジェクト６０４および６０６は文書オブジェクトを表し、オブジェクト６０８は「切り取り」コマンドを表す。図６で、アクティブな文書は、文書オブジェクト６０６であり、ＡｃｔｉｖｅＤｏｃｕｍｅｎｔプロパティを表す実線６０３で示している。本発明の範囲はこうしたオブジェクトおよびコマンドに限定されるものではないことを理解されたい。適した任意のオブジェクトおよびコマンドが作用を受け得る。実際に、本発明の範囲は、オブジェクト指向プログラミング言語環境でのオブジェクトに限定されず、任意のデータソースおよびプロパティの階層に等しく適用することができる。本発明の一部の実施形態では、データバインディングエンジン２０８は、オブジェクト６０２などのデータソース、およびオブジェクト６０２からオブジェクト６０６、さらにオブジェクト６０８へのパスを表す「ＡｃｔｉｖｅＤｏｃｕｍｅｎｔ．ＣｕｔＣｏｍｍａｎｄ」などのプロパティパスの指定を可能にする。データバインディングエンジン２０８は、稼働中のプログラム内の「生きている」（ｌｉｖｅ）オブジェクトを表すオブジェクトグラフに向けてクエリを行って、どのオブジェクトがパス「ＡｃｔｉｖｅＤｏｃｕｍｅｎｔ．ＣｕｔＣｏｍｍａｎｄ」で表されるかを動的に決定することができる。この場合はオブジェクト６０８である。
【００２６】
再度図２を参照すると、ソース２０６は、ソースオブジェクト２１０ａ、２１０ｂなどによって表される１つまたは複数のソースオブジェクトを含み得る。ソースオブジェクト２１０ａ、２１０ｂなどは、ソースコマンドオブジェクト２１０ａなどによって図２に示した１つまたは複数のソースコマンドオブジェクトと関連付けることができる。本発明の一部の実施形態では、ソース２０６はモデルを表し得る。本発明の一部の実施形態のモデルは、基礎を成す状態の集まりを表す基礎を成すアプリケーションロジックである。例えば、ユーザがファイルシステムを探索することができるアプリケーションを考える。この場合のアプリケーションのモデルは、ファイルシステム、つまり選択されたディレクトリのフォルダ、およびフォルダ内のファイルの組とすることができる。いくつかのビューを１つのモデルにバインドすることができる。モデルにバインドされたビューは、モデルに依存し得る。しかし、本発明の一部の実施形態では、モデルはビューに依存しない。モデルは、そのオブジェクトのうちの１つのプロパティが変わった場合、または状態の変更が行われた場合に変更通知を送信することができる。例えば、新しいファイルがフォルダに追加された場合、変更通知が送信され得る。
【００２７】
ソースオブジェクト２１０ａ、２１０ｂなどを、ソースコマンドオブジェクト２１２ａなどによって表される１つまたは複数のコマンドオブジェクトに関連付けることができる。本発明の一部の実施形態では、コマンドオブジェクトは、実行メソッドに関連付けられているオブジェクト、すなわちコマンドオブジェクトは実行可能オブジェクトであり、状態を有する。本発明の一部の実施形態で、コマンドオブジェクトに関連付けられている状態は、コマンドを実行することができるかどうかを表す、つまりコマンドがアクティブ（使用可能）か非アクティブ（使用不可）かを表すブール値である。コマンドの例には、それだけには限定されないが、「文書を開く」、「選択したテキストを切り取る」などがある。
【００２８】
ターゲット２０３は、ターゲットオブジェクト２０４ａ、２０４ｂなどによって図２で表される１つまたは複数のターゲットオブジェクトを含み得る。本発明の一部の実施形態では、ターゲットは、ビューまたはユーザインターフェイスとすることができる。１つまたは複数のビューは、モデルにバインドされ、基礎を成すモデルの状態を表示することができる。本発明の一部の実施形態では、ビューまたはユーザインターフェイスは、ユーザインターフェイスの外見が定義され、ユーザインターフェイスの要素および構成要素が定義されるＨＴＭＬ（ハイパーテキストマークアップ言語）、ＸＭＬ（拡張可能マークアップ言語）、ＸＡＭＬ（ｅＸｔｅｎｓｉｂｌｅ  Ａｐｐｌｉｃａｔｉｏｎ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）、または他の適したマークアップ言語などのマークアップ言語で定義される。ターゲットオブジェクトは、それだけには限定されないが、メニュー項目、ボタン、またはリストボックスなどのユーザインターフェイス要素またはコントロールとすることができる。上述したファイルシステムの例では、ユーザインターフェイスの例は、選択されたディレクトリのフォルダ内の現在のファイルのリストを表示することができる。
【００２９】
ユーザインターフェイスを、基礎を成すモデルにバインドするために、本発明の一部の実施形態では、イベントハンドラを使用してバインディングを明示的に定義する、またはＩＤの割当、およびコマンドマネージャの呼出を介して基礎を成すモデルにユーザインターフェイス構成要素を間接的に関連付ける代わりに、図６に関して上述したように、データソースオブジェクトおよびクエリパスを指定することによってユーザインターフェイス構成要素を表すオブジェクトが基礎を成すモデルオブジェクトにバインドされる。クエリの任意の部分が変更された場合、オブジェクトによって変更通知が送信され、データバインディングエンジンは、変更通知を検出し、適切なオブジェクトを更新する。クエリが行われる対象は、稼働中のプロジェクト内の生きているオブジェクトであることを理解されたい。
【００３０】
図３は、図２のシステムのより詳細なブロック図である。図３では、データバインディングエンジン３２０は、モデル３２４の一部であるソースオブジェクトのコマンドプロパティ３２２をＵＩ構成要素３３０などのターゲットオブジェクトのプロパティにバインドすることができる。データバインディングエンジン３２０は、プロパティ変更通知、ここではモデルプロパティ３２２の通知３２６、ＵＩプロパティ３３４の通知３２８をリッスンし、ソース３２４およびターゲット３３０を自動的に同期する。ＵＩ構成要素などのターゲット３３０を、ターゲット３３０がバインドされるソースとして働くデータソース３３２に関連付けることができる。
【００３１】
本発明の一部の実施形態では、バインドすべきＵＩプロパティ３３４は、コマンドオブジェクトのシンクまたはターゲットプロパティであり、バインドすべきモデルプロパティ３２２はモデルのコマンドプロパティである。非限定のターゲットプロパティ例は、例えば「ＣｌｉｃｋＣｏｍｍａｎｄ」とすることができる。本発明の一部の実施形態では、コマンドバインディングは、モデル３２４をデータソースとして割り当て、ＵＩ構成要素３３４のプロパティをモデル３２２のコマンドプロパティにデータバインディングすることによって達成される。一部の実施形態では、バインドは、任意のプログラムコードの必要無く、宣言的に達成することができる。宣言ステートメントの例は、
<MenuItem ClickCommand="*Bind(DataSource=model,
Path=DocumentManager.ActiveDocument.CutCommand)"/>
とすることができる。
【００３２】
このステートメントは、メニュー項目「ＣｌｉｃｋＣｏｍｍａｎｄ」に関連付けられているデータソースはオブジェクト「ｍｏｄｅｌ」であり、ＣｌｉｃｋＣｏｍｍａｎｄに関連付けられるべきオブジェクトはＡｃｔｉｖｅ  ＤｏｃｕｍｅｎｔのＣｕｔ  Ｃｏｍｍａｎｄプロパティであることを意味する。ＵＩは、コードを書くことなくＵＩデザイナーツール内、またはデザイナーツールの外部で、マークアップで作成することができる。あるいは、プログラムコードを書くことによって同じ結果を達成することができる。
【００３３】
本発明の一部の実施形態では、コマンドオブジェクトを、プロパティとして提示された追加の状態に関連付けることができる。例には、それだけには限定されないが、ＩｓＥｎａｂｌｅｄ、ユーザに対して表されるテキスト名、キーバインディングまたはアイコンなどがある。状態は、開発者によって明示的に提供され得る、またはアプリケーションの他のプロパティから算出または導出され得る。本発明の一部の実施形態では、例えばメニュー項目はその使用可能状態をコマンドオブジェクトのＩｓＥｎａｂｌｅｄプロパティに設定し、その可視の外観を更新する、メニュー項目はユーザに対して表されるテキストをコマンドオブジェクトのテキストプロパティに更新するなど、ターゲットオブジェクトは、これらのプロパティをどのように処理するかがわかる。コマンドオブジェクトは、こうしたプロパティの変更通知を提供する。ターゲットオブジェクトは、変更通知をリッスンし、変更通知の場合にそのプロパティおよび外観を更新する。コマンドオブジェクトのすべてのプロパティをターゲットオブジェクトがわかっている必要はない。
【００３４】
本発明の一部の実施形態では、ターゲットオブジェクトは一部の状態プロパティの暗黙的な処理を行わない。この場合、データバインディングを使用して、コマンドオブジェクトの既知のプロパティをターゲットオブジェクトの既知のプロパティにバインドする。
【００３５】
<MenuItem
Text="*Bind(Path=DocumentManager.ActiveDocument.CutCommand.Text"/>
【００３６】
本発明の一部の実施形態では、コマンドオブジェクトは、状態を持たず、プロパティをまったく備えていない。状態プロパティは、依然としてモデルによって提供され、データバインディングを使用してターゲット要素にバインドされ得る。
【００３７】
本発明の一部の実施形態では、状態を持たないコマンドは、モデルにメソッドを提供し、コマンドオブジェクトの代わりにそのメソッドをバインドすることによって達成することができる。
【００３８】
<MenuItem Click="*Bind(Path=ActiveDocument.Copy)"
Enabled="*Bind(Path=ActiveDocument.CanCopy)"/>
【００３９】
この場合、コマンドオブジェクトは必要ない。ＣａｎＣｏｐｙ状態はモデルによって提供され、Ｃｏｐｙ（）メソッドはデータバインディングを使用してバインドされる。
【００４０】
図４は、本発明の一部の実施形態によるコマンドバインディングのためのシステムを使用できる一般のシナリオを示している。複数の文書のうちの１つ、すなわち文書４１０がアクティブである、複数の文書４０８、４１０などを処理するアプリケーションを考える。モデルの一部である文書マネージャ４０４は、アクティブ文書のプロパティを提示する。モデルの一部である文書オブジェクト４０８、４１０などは、コマンドオブジェクト４１２など、編集コマンドをプロパティとして提示することができ、これは選択可能である。一部の実施形態では、プロパティパスを使用して、まずアクティブな文書４１０のアドレスを指定し、次いでユーザインターフェイス４０２上のボタンを介してアクティブな文書の編集コマンドを選択することによって宣言バインディング（ｄｅｃｌａｒａｔｉｖｅ  ｂｉｎｄｉｎｇ）を達成することができる。宣言バインディングステートメントの例は
【００４１】
<MenuItem ClickCommand=
"*Bind(Path=DocumentManager.ActiveDecument.CutCommand)"/>
または
<MenuItem ClickCommand=
"*Bind(Path=DocumentManager.ActiveDecument.CopyCommand)"/>
または
<MenuItem ClickCommand=
"*Bind(Path=DocumentManager.ActiveDecument.PasteCommand)"/>
などである。一部の実施形態では、文書マネージャ４０４は、例えばユーザがアクティブの文書を変更するなど、アクティブの文書４１０のプロパティに対する任意の変更の変更通知を提供することができる。変更通知は、データバインディングエンジン４０６によって検出され、コマンドは、アクティブの文書に再度バインドされる。本発明の一部の実施形態では、上記の結果はプログラムコードを書くことなく宣言的に達成されたことに留意されたい。コマンド管理のサービスは不要である。
【００４２】
本発明の一部の実施形態では、コマンドプロパティではない任意のプロパティをメニュー項目にバインドすることができる。例えば、あるモデルのブールプロパティをチェックボックスメニュー項目にバインドすることができる。本発明の一部の実施形態では、チェックボックスＵＩ構成要素は、ターゲットプロパティとして使用できる「ＩｓＣｈｅｃｋｅｄ」などのプロパティを提示することができる。同様に、オブジェクトのリストを特殊リストボックスメニュー項目にバインドして、それだけには限定されないが、「最近使用された」ファイルリストなどのシナリオに対処することができる。
【００４３】
図５は、本発明の一実施形態によるコマンドバインディングを指定し、実行する方法のフロー図例を示している。方法の１つまたは複数のステップは任意選択である。図５では、ステップ５０２で、ソース定義が受信される。これは、モデルまたはアプリケーションのコード化および／またはインスタンス化を伴い得る。例えば、開発者は、それにバインドすべき１つまたは複数のプロパティを提示するモデルを実装することができる。ステップ５０４で、ターゲット定義が受信される。これは、ユーザインターフェイスおよび／またはユーザインターフェイスのインスタンス化などのターゲットのコードまたはマークアップでの指定を伴い得る。例えばデザイナーは、マークアップ言語でユーザインターフェイスを作成でき、開発者はコードでユーザインターフェイスを作成することができる。ステップ５０６で、コマンドバインディングステートメントが受信される。これは、上述したように、開発者によるターゲットとソースとのデータ接続のコード化、またはデザイナーによるコマンドバインディングステートメントのマークアップでの指定を伴い得る。本発明の一部の実施形態では、コマンドバインディングステートメントの指定は、ステップ５０４のターゲットの定義に組み込むことができる。
【００４４】
ステップ５０８で、モデルおよびユーザインターフェイスを含むアプリケーションを生成し、かつ／またはインスタンス化することができる。バインディングエンジンは、モデルのパスをリッスンし、コマンドバインディングステートメントを評価することができる。コマンドバインディングステートメントの評価が成功した場合、ターゲットおよびモデルは、上述したように同期され得る。本発明の一実施形態では、１つまたは複数のコマンドバインディングステートメントが提供され得る。コマンドバインディングは、上述したように、１つまたは複数のデータバインディングコマンドパスおよびデータソースをソースに宣言的に割り当てることによって達成することができる。本発明の一部の実施形態では、コマンドパスおよびデータソースは、ＨＴＭＬ、ＸＭＬ、ＸＡＭＬ、または他の適したマークアップ言語などのマークアップ言語で宣言的に定義される。モデルのパスを、変更通知について連続的に監視することができる。コマンドプロパティが変更されたことを示す変更通知がコマンドオブジェクトから受信される。本発明の一部の実施形態では、変更通知は、コマンドオブジェクトによって送信され、データバインディングエンジンによって検出される。変更通知が受信されると、コマンドバインディングステートメントは再評価され、上述したように、ソースおよびターゲットが同期される。一部の実施形態では、データバインディングエンジンは、オブジェクトグラフに向けてクエリを行ってデータソースおよびデータパスによって示されるオブジェクトを探し、データバインディングエンジンは、一般のオブジェクトバインディング機構によってターゲットを自動的に更新する。
【００４５】
本明細書に記載した様々な技術は、ハードウェアまたはソフトウェアとともに、または適切な場合はその両方の組み合わせで実施することができる。したがって本発明の方法および装置、またはそのいくつかの態様またはその一部は、フロッピー（登録商標）ディスク、ＣＤ−ＲＯＭ、ハードドライブ、または他の任意の機械可読記憶媒体などの有形の媒体に埋め込まれるプログラムコード、すなわち命令の形をとることができ、プログラムコードがコンピュータなどの機械にロードされ、それによって実行されると、機械は本発明を実施する装置となる。プログラム可能コンピュータでプログラムコードを実行する場合、コンピューティング装置は一般に、プロセッサ、揮発性、不揮発性メモリおよび／または記憶要素などを含むプロセッサによって読み取り可能な記憶媒体、少なくとも１つの入力装置、および少なくとも１つの出力装置を含む。例えばデータ処理ＡＰＩなどの使用を介して本発明の態様のドメイン固有のプログラミングモジュールの作成および／または実装を使用し得る１つまたは複数のプログラムは、コンピュータシステムと通信するために、高レベルの手続き型またはオブジェクト指向プログラミング言語で完全に実施される。しかし、プログラムは、必要に応じてアセンブリまたは機械言語で実施することができる。どんな場合でも、言語は、コンパイラ型、またはインタープリタ型言語とすることができ、ハードウェア実装と組み合わせることができる。
【００４６】
本発明を様々な形状の好ましい実施形態とともに説明してきたが、他の同様の実施形態を使用することができ、または変更および追加を記載した実施形態に加えて、本発明から逸脱することなく本発明の同じ機能を実行することができることを理解されたい。したがって本発明は、任意の単一の実施形態に限定されるものではなく、むしろ添付の特許請求の範囲による幅および範囲内に含まれるものとする。
【図面の簡単な説明】
【００４７】
【図１】本発明の態様を実施できるコンピューティング環境例を示すブロック図である。
【図２】本発明の一実施形態によるコマンドバインディングのシステム例を示すブロック図である。
【図３】本発明の一実施形態による図２のより詳細なブロック図である。
【図４】本発明の一実施形態による図３のコマンドバインディングシステムの使用例を示すブロック図である。
【図５】本発明の一実施形態によるコマンドバインディングの方法例を示すフロー図である。
【図６】本発明の一態様によるオブジェクトを示すブロック図である。
【符号の説明】
【００４８】
１００  コンピューティング環境
１２０  処理ユニット
１２１  システムバス
１３０  システムメモリ
１３４  オペレーティングシステム
１３５  アプリケーションプログラム
１３６  他のプログラムモジュール
１３７  プログラムデータ
１４０  固定式不揮発性メモリインターフェイス
１４４  オペレーティングシステム
１４５  アプリケーションプログラム
１４６  他のプログラムモジュール
１４７  プログラムデータ
１５０  脱着式不揮発性メモリインターフェイス
１６０  ユーザ入力インターフェイス
１６１  マウス
１６２  キーボード
１７０  ネットワークインターフェイス
１７１  ローカルエリアネットワーク
１７２  モデム
１７３  広域ネットワーク
１８０  リモートコンピュータ
１８２  グラフィックスインターフェイス
１８５  リモートアプリケーションプログラム
１８６  ビデオメモリ
１９０  ビデオインターフェイス
１９１  モニタ
１９５  出力周辺インターフェイス
１９６  プリンタ
１９７  スピーカ
２０２  コンピュータ
２０３  ターゲット
２０６  ソース
２０８  データバインディングエンジン
３２０  データバインディングエンジン
３２２  バインドするコマンドオブジェクト
３２４  モデル（ソース）
３３０  ＵＩ構成要素（ターゲット）
３３２  データソースプロパティ
３３４  ターゲットプロパティ
４０２  ＵＩ要素（ボタンなど）
４０４  文書マネージャ
４０６  データバインディングエンジン
４０８  文書
４１０  文書
４１２  コマンドオブジェクト
６０２  文書マネージャオブジェクト
６０３  プロパティ
６０４  文書オブジェクト１
６０６  文書オブジェクト２
６０８  プロパティ
【図１】
2005301993.tif 000003
【図２】
2005301993.tif 000004
【図３】
2005301993.tif 000005
【図４】
2005301993.tif 000006
【図５】
2005301993.tif 000007
【図６】
2005301993.tif 000008