コントロールテンプレートの主要な利点は再利用できる点です。コントロールテンプレートの作成後デザイン内の異なる個所で使用することができます。サンプル Cities1-Reuse.mtdでの目的は下のスクリーンショットで示されている通り大陸、国、都市の順に選択を行い、ユーザーが都市名を 選択することです。(XML ページソースCitiesWorldwide.xml から位置情報データのすべては参照されています。)
(1つは国のため、もう1つは都市のための)横長のラジオボタンの2つのセットが使用されているため、 名前を持つ 動的なラジオボタン (横長) が作成されており、2度使用されています。1度目は選択された大陸の国を生成するために使用されており、2度目は選択された国の都市のラジオボタンを生成するために使用されています。
プロジェクトは Select Country and City という名前のトップページで2度使用されているコントロールテンプレート 動的なラジオボタン (横長)により構成されています。トップページのデザインは下のスクリーンショットで示されています。ユーザーがコンボボックスから大陸を選択すると、その大陸の国のラジオボタンが表示されます。国が選択されると、その国の都市のラジオボタンが表示されます。
ユーザーにより選択された大陸、国、都市はそれぞれ $PERSISTENT ページソースの個別のノードに保管されます(右上のスクリーンショット参照)。これらの3個のページソースノード ( $PERSISTENT/Root 要素の @Continent、 @Country、 と @City 属性)を対応するデザインコンポーネントにドロップすると特定の重要な機能が作動します :
•コンボボックス上の@Continent は @Continent を更新しますコンボボックス内の選択を使用し@Continent をコンボボックスのコンテキストノードにします。
•placeholder-control-1 上の @Country はプレースホルダコントロール(およびプレースホルダコントロールが呼び出すコントロールテンプレート)の @Country コンテキストノード を作成します 。@Country内の値がコントロールテンプレート内のラジオボタンの 編集の完了時 アクションを介して更新されます。 (下を参照)。
•placeholder-control-2 上の プレースホルダノード(そしてプレースホルダコントロールが呼び出すコントロールテンプレート)の@City は@City コンテキストノード を作成します。@City 内の値はコントロールテンプレート内のラジオボタンの 編集の完了時を介して更新されます (下を参照)。
プレースホルダコントロールにより呼び出されるコントロールテンプレート内のすべての Xpath 式はこのコンテキストノードに相対的に評価されるためにプレースホルダコントロールのためのコンテキストノードの設定は重要です。
コントロールテンプレートは $values という名前の必須のパラメーターを有するように宣言されています。この宣言をページペイン内で(下のスクリーンショットで赤い枠で囲まれている) 追加コンポーネント ボタンをクリックして確認することができます。
コントロールテンプレートのデザインは下のスクリーンショットで示されています。コントロールテンプレートは横長に展開するテーブルにより構成されています。すなわち、テーブルが展開されるためにシーケンスの各アイテムのために新規の列が作成されます。(下のスクリーンショットで表示されているように)(テーブルの展開のための) このシーケンスは $values パラメーターで保持されるように定義されます。各列にはラジオボタンが存在します。ですから $values が国名のシーケンスを持つ場合、ラジオボタンを含む列がシーケンスがシーケンス内の各国名のために作成されます。$values が都市名を持つ場合ラジオボタンを含む列がシーケンスがシーケンス内の各都市名のために作成されます。$values のコンテンツがどのように定義されているかは以下で説明されています。
ラジオボタンコントロールには(「スタイル & プロパティ」ペイン で定義済みの)以下の設定が存在します :
•各ラジオボタンに伴うテキストを決定する テキスト プロパティ。サンプルで定義されるテキストは $MT_TableColumnContext 変数のコンテンツになります。この変数は横長に展開するテーブルで使用するために特別に派生された MobileTogether アプリケーション変数です。このようなテーブルの各列のために現在のコンテキストノードが含まれています。サンプル内で $values シーケンス内の国名のために新しい列が作成されると、その国名がその列のためのコンテキストノードとなり、その列の生成中にその国名が $MT_TableColumnContext 変数内に保管されます。ラジオボタンの テキスト プロパティは $MT_TableColumnContext に設定されているため、各ラジオボタンは現在の列の生成を引き起こしたシーケンスアイテムの名前を持つようになります。
•(編集の完了時のための) コントロールアクション プロパティは $MT_TableColumnContext の値と共に現在のノードを更新します。現在のノードとは何ですか?呼び出しプレースホルダのコンテキストノードです (上を参照)。サンプルでは、それぞれ (最初と2番目のプレースホルダの) $PERSISTENT/Root 要素の @Country と @City 属性です。 次にどの $MT_TableColumnContext 値 (すなわちどの列) が現在のノードにパスされますか? 回答: クリックされたラジオボタンを含む列上記の結果: クリックされたラジオボタンの国/都市名は @Country または @City 属性にそれぞれパスされます。
•チェックされた値 (またはラジオボタンの Xpath から値を取得 ) プロパティはボタンが (1 の値) または (0 の値) を選択するかを定義します。コントロールテンプレート内のこの値を決定する Xpath 式 : if ($MT_TableColumnContext = .) then 1 else 0.この式は $MT_TableColumnContext 値を持つラジオボタンの値を現在のノードの値と同じ値である 1 に設定します (すなわち、プレースホルダコントロールのコンテキストノードです。 サンプルでは$PERSISTENT/Root 要素の@Country または @City 属性です) via the 編集の完了時 アクションを介したの$MT_TableColumnContextの値を使用して現在のノードは更新されており、クリックされた (そして 編集の完了時 アクションによりトリガーされた)ラジオボタンのみが 1の値を持ちます。
後はコントロールテンプレート $values パラメーターにパスされるシーケンスを指定するのみです。この定義はプレースホルダコントロールで設定されます (下を参照)。
メモ: | 動的なラジオボタン (横長) により $values パラメーターに提供される値の すべての シーケンスのための横長のラジオボタンを作成できるようになります。 |
プレースホルダコントロール はデザイン内のプレースホルダコントロールを必要な場所にドロップして、 コントロールテンプレート プロパティを必要とするコントロールテンプレートを選択するように設定しコントロールテンプレートのために作成されます。代わりにデザイン内の必要とする個所で希望するコントロールテンプレートをドロップすると コントロールテンプレート プロパティが自動的に設定されます。
サンプルでのプレースホルダコントロールのための主要な設定は下で説明されています。上のスクリーンショットは国を選択するために使用されている最初のプレースホルダのプロパティを表示しています。
•関連するページソースノード: これはプレースホルダコントロールのコンテキストノードになるページソースノード、およびこのコンテキストで呼び出されるコントロールテンプレートのコンテキストノードを指定しています。(パラメーターと変数を含む)コントロールテンプレート内のすべての Xpath 式はこのノードに相対的に評価されます。ページソースノードを プレースホルダコントロールにドロップすることによりこれを設定することができます。プロジェクト内で2個の プレースホルダコントロール に 関連しているページソースノードはそれぞれ$PERSISTENT/Root 要素の @Country と @City 要素 です。
•コントロールテンプレート:プレースホルダコントロールの箇所でインスタンス化されるコントロールテンプレートを選択します。プロパティのコンボボックスからコントロールテンプレートを選択することができます。(代わりに、コントロールテンプレートはデザインにドラッグすることができ、このプロパティは自動的にコントロールテンプレートを選択するように設定されます。)
•パラメーター:コントロールテンプレートの $values パラメーターに送信される値を定義します。ユーザーが選択した大陸の国のためのラジオボタンをインスタンス化するプレースホルダコントロールの場合 Xpath 式は以下のようになります: $COUNTRIES-AND-CITIES/Cities/Continent[@name=$PERSISTENT/Root/@Continent]/Country/@name。この式内の (黄色でハイライトされている) 述語フィルターは( $PERSISTENT ツリー内で保管されてる)ユーザーが選択した大陸を選択します 。選択された国の都市のためにラジオボタンを生成する2番目のプレースホルダコントロールの Xpath 式: $COUNTRIES-AND-CITIES/Cities/Continent[@name=$PERSISTENT/Root/@Continent]/Country[@name=$PERSISTENT/Root/@Country]/City/@name.
2つのプレースホルダは異なるコンテキストノードを有しており $values パラメーターに異なるシーケンスを送信していることに注意してください。これによりコントロールテンプレートは適切なラジオボタンを対応するプレースホルダコントロールによりインスタンス化されている2か所で生成します。