ベスト プラクティス: 基本事項

ArcGIS Viewer for Silverlight には拡張API(アプリケーション プログラミング インタフェース)が用意されています。開発者はこの拡張 API を使用して、選択されたレイヤやマップにアクセスしたり、ダイアログ ボックスにUI(ユーザ インタフェース)を表示するメソッドを呼び出したり、構成データの保存と読み込みを実行したりします。拡張 API は ArcGIS Extensbility SDK for Silverlight に含まれています。最初に、ツールを作成するのか、ビヘイビアを作成するのかを決定します。作成するアドインのタイプを決定したら、この後の「マップおよび選択されたレイヤの操作」を参照し、作成したアドインからマップにアクセスする方法を確認してください。

ツールとビヘイビア

ツールを使用すると、ユーザによる操作から開始するロジックを簡単に実装できます。ツールバーのボタンをユーザがクリックしたとき特定の機能が開始されるようにする場合は、その機能をツールとしてカプセル化します。たとえば、[個別属性] ツールのボタンをツールバーに追加し、ユーザがクリックできるようにしておきます。

マップ ビヘイビアを使用すると、常に有効にする機能を簡単に実装できます。マップ ビヘイビアで実装した機能はユーザの介入を必要としません。開発した機能を常に表示する場合は、その機能をマップ ビヘイビアとしてカプセル化してください。たとえば、マップ範囲を制限したり、マウス ポインタにマウスの座標を表示したり、アプリケーションの読み込み時に説明ダイアログ ボックスを表示したりする場合などにマップ ビヘイビアを使用します。

詳しい説明と使用例は、「ツールの作成」および「マップ ビヘイビアの作成」をご参照ください。

マップおよび選択されたレイヤの操作

マップおよび選択されたレイヤにアクセスするには、静的な ESRI.ArcGIS.Client.Extensibility.MapApplication オブジェクトのプロパティを使用します。つまり、MapApplication.Current プロパティを使用して MapApplication オブジェクトにアクセスします。このマップ オブジェクトにアクセスするには、アドイン コードで MapApplication.Current.Map を使用します。選択されたレイヤにアクセスするには、MapApplication.Current.SelectedLayer を使用します。「ツールの作成」「」に挿入されているコードは、CanExecute メソッドでマップにアクセスする方法を示しています。次のコード例は、ユーザがツールを実行したとき、選択されたレイヤの ID を表示する単純なコマンドを示しています。CanExecute メソッドのロジックにより、GraphicsLayer が選択された場合のみツールが有効になります。

[Export(typeof(ICommand))]
[DisplayName("Show GraphicsLayer ID")]
[Category("My Tools")]
[Description("Shows the ID of the selected GraphicsLayer")]
[DefaultIcon("Path to icon, ex: "/Viewer.Addins;component/Images/Identify.png"")]
public class ShowGraphicsLayerIdCommand : ICommand
{
     public void Execute(object parameter)
     {
          // Show the selected layer's ID.
          MapApplication.Current.ShowWindow("Layer ID", new TextBlock()
            {
                Text = MapApplication.Current.SelectedLayer.ID,
                TextWrapping = TextWrapping.Wrap,
                Margin = new Thickness(30),
                MaxWidth = 480
            });
   
     }    
 
     public bool CanExecute(object parameter)
     {
          // Return true (that is, make the command executable) only if the selected layer is a GraphicsLayer.
          return MapApplication.Current.SelectedLayer is GraphicsLayer;
     }
 
     public event EventHandler CanExecuteChanged;
}
拡張 API には、選択済みレイヤが変更されたときに発生するイベント、レイヤの名前を取得するメソッド、およびレイヤの名前を設定するメソッドが用意されています。レイヤ名は [レイヤの構成] パネルで識別されます。レイヤ名とレイヤ ID はそれぞれ目的が異なります。レイヤ名は、ビューアのエンド ユーザがレイヤを直感的に識別できるようにするためのものです。レイヤ ID は、マップのレイヤ コレクションに属するレイヤをプログラムで一意に識別できるようにすることを目的としています。選択済みレイヤの変更イベントにアクセスするには MapApplication.Current.SelectedLayerChanged を使用します。レイヤ名を取得および設定するには、MapApplication.Current.GetLayerName メソッドと MapApplication.Current.SetLayerName メソッドを使用します。次のコードは、ユーザが別のレイヤを選択したとき、そのレイヤの名前をメッセージ ボックスに表示する単純なビヘイビアを示しています。

[Export(typeof(Behavior<Map>))]
[DisplayName("Show Selected Layer Name Behavior")]
[Category("My Behaviors")]
[Description("Shows a message box with the selected layer name")]
public class ShowSelectedLayerNameBehavior : Behavior<Map>
{
     protected override void OnAttached()
     {
          base.OnAttached();
 
          // Add a handler to the applications's SelectedLayerChanged event.
          MapApplication.Current.SelectedLayerChanged += ShowSelectedLayerName;
     }
 
     private void ShowSelectedLayerName(object s, EventArgs args)
     {
          // Show a message box with the selected layer name.
          string layerName = MapApplication.Current.SelectedLayer.GetValue(MapApplication.LayerNameProperty) as string;
          MapApplication.Current.ShowWindow("Layer Name", new TextBlock()
            {
                Text = layerName,
                TextWrapping = TextWrapping.Wrap,
                Margin = new Thickness(30),
                MaxWidth = 480
            });
     }
 
     protected override void OnDetaching()
     {
          // Remove the handler from the application's SelectedLayerChanged event.
          MapApplication.Current.SelectedLayerChanged -= ShowSelectedLayerName;
     }
}

6/8/2012