コマンディングの概念
ルーティング コマンドは、動作が処理される方法を拡張する、WPF で利用可能な機能です。後で待ち行列に入れて起動することができるアクションのリクエストをカプセル化するためにオブジェクトが使用されるコマンド デザイン パターンに従います。オブジェクト、特にコマンドはアクションの動作とソースを実際的なロジックと分離するために使用されます。これは、各ターゲット オブジェクト固有のコマンドの実際的な実行に伴い、ひとつ以上のソースがサポートする任意のオブジェクトでコマンドを呼び出すことを意味します。たとえば、Paste コマンドの場合、このコマンドをサポートする任意のアプリケーションがこのコマンドを使用できます。つまりスプレッドシートアプリケーション、テキスト エディターまたは画像編集アプリケーションですが、貼り付け操作の実際のロジックは各アプリケーション固有です。
Microsoft® Silverlight™ コマンディング
Silverlight はコマンドをサポートしません。ただし、Infragistics は WPF にあるコマンドの基本的概念に従うコマンド フレームワークを提供しています。Infragistics コマンディング システムは以下で構成されます:
- ソース - コマンドを呼び出すオブジェクト
- ターゲット - コマンドが実行するオブジェクト
- コマンド - アクション
ソースが生じるイベントをセットアップするときにコマンドが実行します。
ターゲットを見つける
コマンドのターゲットは ICommandTarget インターフェースを実装しコマンドをサポートするオブジェクトです。イベントが発生する時、コマンド フレームワークはコマンドのターゲットを解決しようとします。これが生じる基本的な方法は 3 通りあります。
- CommandSource のターゲット プロパティは直接的に設定されます。
- CommandSource は添付コマンドをサポートするすべてのグローバルに登録された ICommandTarget オブジェクトを調べます。コマンド ソースには TargetName プロパティがあり、グローバルに登録されたターゲット名を指定してコマンドを実行することができます。
- CommandSource は添付コマンドをサポートするすべてのグローバルに登録された ICommandTarget オブジェクトを調べます。コマンド ソースには TargetName プロパティがあり、グローバルに登録されたターゲット名を指定してコマンドを実行することができます。ターゲット名を設定しない場合、コマンドはそのコマンドをサポートするすべてのグローバルに登録された ICommandTarget オブジェクトで実行します。
- コマンドをサポートするターゲットが見つけられるまでコマンド ソースから開始して親エレメントに至るまで視覚ツリーはトラバースします。
たとえば、
xamWebGrid コントロールは使用できるさまざまなコマンドを公開します。このようなコマンドのひとつがページングのための NextPage コマンドです。コマンドを実行するには、XamWebGridPagingCommandSource オブジェクトなどのコマンド ソースを使用して、オブジェクトの EventName プロパティと CommandType プロパティをそれぞれ使用してイベントとコマンド タイプを設定します。視覚ツリーのターゲットでコマンドが実行されます。以下の XAML では、ボタンがクリックされると NextPage コマンドが実行します。コマンドをサポートする視覚ツリーの最初のオブジェクトであるため、コマンドは PagerCellControl オブジェクトで実行します。
XAML の場合:
<Style x:Name="CustomPager1" TargetType="grid:PagerCellControl" >
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="grid:PagerCellControl">
<Button x:Name="NextPageButton" Content="Next">
<!-- 使用するコマンドを指定します。コマンドはボタン内にあるため、EventName プロパティはボタンのイベントを参照します。-->
<igBase:Commanding.Command>
<grid:XamWebGridPagingCommandSource EventName="Click" CommandType="NextPage" ></grid:XamWebGridPagingCommandSource>
</igBase:Commanding.Command>
</Button>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
以下のコードは、xamWebSpellChecker™ で正しいターゲットを見つけるためにコマンド ソースの TargetName プロパティを使用する方法を示します。
XAML の場合:
<igSpell:XamWebSpellChecker x:Name="spellChecker">
<igSpell:XamWebSpellChecker.SpellCheckTargets>
<Binding ElementName="Note" Path="Text" Mode="TwoWay"/>
</igSpell:XamWebSpellChecker.SpellCheckTargets>
</igSpell:XamWebSpellChecker>
<Button Content="Spell Check" >
<ig:Commanding.Command>
<igSpell:XamWebSpellCheckerCommandSource CommandType="SpellCheck" TargetName="spellChecker" EventName="Click"/>
</ig:Commanding.Command>
</Button>
