ツールの作成
ツールは、ArcGIS Viewer for Silverlight でユーザが開始する必要のあるロジックを簡単に呼び出す方法を提供します。ツールバーのボタンをクリックして開始させるのが適した機能を実装する場合は、その機能をツール内にカプセル化する必要があります。
詳細については、「ベスト プラクティス: はじめに」および「ArcGIS Viewer for Silverlight の拡張」をご参照ください。
ビューアでは、ICommand インタフェースをツールとして実装したオブジェクトを呼び出すことができます。このインタフェースはシンプルなメンバーをいくつか提供します。ビューアでは、これらのメンバーは次のように使用されます。
- Execute - ツールバー上でツールに対応するボタンをクリックしたときに呼び出されます。
- CanExecute - ツールが実行可能な状態にあるのかチェックするために、ビューアによって頻繁に呼び出されます。このメソッドから true が返された場合、ツールバー上の対応するボタンは有効になります。このメソッドから false が返された場合、ボタンは無効になります。
- CanExecuteChanged - コマンドの実行可能性の変更時に発生させることができるイベント。このイベントの発生時には、ビューアが CanExecute メソッドを呼び出します。これにより、このアドインがツールバー上のツールのボタンの状態を更新できるようになります。
これらのメンバーの実装に加えて、ICommand を実装するクラスには 2 つの属性を追加する必要もあります。1 つ目に追加する属性は System.ComponentModel.Composition.ExportAttribute で、これは、Microsoft の Managed Extensibility Framework(MEF)の一部として提供される System.ComponentModel.Composition アセンブリに含まれています。この属性は、ツールバーに追加するためにツールを使用可能にする必要があることをビューアに伝えます。実装するツールにこの属性を含める場合は、常に次のような形式になります。
[Export(typeof(ICommand))]
public class MyCommand : ICommand
追加する必要があるもう 1 つの属性は、ESRI.ArcGIS.Client.Extensibility.DisplayNameAttribute です。この属性は、ツールをビューアに追加するときに設計者に対して表示される、ツール名を決めるものです。ESRI.ArcGIS.Client.Extensibility アセンブリから指定できる追加のオプション属性には、CategoryAttribute、DefaultIconAttribute、DescriptionAttribute などがあります。この属性は次のように指定します。
[Export(typeof(ICommand))]
[DisplayName("Simple Command")]
[Category("My Tools")]
[Description("Simple tool with MessageBox")]
[DefaultIcon("Path to icon, ex: "/Viewer.Addins;component/Images/SimpleTool.png"")]
public class MyCommand : ICommand
簡単なコマンドの例を以下に示します。このツールはメッセージ ボックスを表示し、マップが NULL でない場合に有効になります。この例では、CanExecuteChanged イベントは使用されません。
[Export(typeof(ICommand))]
[DisplayName("Simple Command")]
[Category("My Tools")]
[Description("Simple tool with MessageBox")]
[DefaultIcon("Path to icon, ex: "/Viewer.Addins;component/Images/SimpleTool.png"")]
public class MyCommand : ICommand
{
public void Execute(object parameter)
{
// Show a message box when the tool's button is clicked.
MessageBox.Show("Simple tool executed");
}
public bool CanExecute(object parameter)
{
// Show as executable (i.e., enable the button on the toolbar) unless the map is null.
return MapApplication.Current.Map != null;
}
public event EventHandler CanExecuteChanged;
}