Skrive verktøy

Verktøy er et middel til å vise logikk i den ArcGIS-kartwebdelen som skal initieres av brukeren. Hvis det virker fornuftig at funksjonaliteten du implementerer, initieres ved at en bruker klikker på en knapp på båndet, bør du innkapsle denne funksjonaliteten i et verktøy.

Kartwebdelen viser kommandoer (verktøy) som implementerer grensesnittet ICommand. Dette grensesnittet gir noen få medlemmer. I en kartwebdelkontekst brukes disse medlemmene som følger:

  • Execute – Kalles opp når knappen på båndet tilsvarer kommandoen det klikkes på.
  • CanExecute – Kalles ofte opp av kartwebdelen for å kontrollere om kommandoen er i en tilstand der den kan utføres. Når denne metoden returnerer sann, aktiveres den tilsvarende knappen på båndet. Når metoden returnerer usann, er knappen ikke tilgjengelig.
  • CanExecuteChanged – Hendelse som kan utløses når kommandoens kjørbarhet endres. Når denne hendelsen utløses, aktiverer kartwebdelen metoden CanExecute, slik at tilleggsmodulen kan oppdatere tilstanden til kommandoknappen på båndet.

I tillegg til å implementere disse medlemmene må du også legge til to attributter til klassen som implementerer ICommand. Det første er System.ComponentModel.Composition.ExportAttribute, som er inkludert i samlingen System.ComponentModel.Composition som inngår i Microsoft Managed Extensibility Framework (MEF). Dette attributtet informerer kartwebdelen om at kommandoen bør gjøres tilgjengelig for å kunne legges til på båndet. Når du inkluderer det i en kommando du implementerer, tar det alltid følgende form:

[Export(typeof(ICommand))]
public class MyCommand : ICommand

Det andre attributtet som skal legges til, er ESRI.ArcGIS.Client.Extensibility.DisplayNameAttribute. Dette bestemmer navnet på kommandoen slik det vises for en designer som skal legge det til i kartwebdelen. Dette attributtet skal angis som følger:

[Export(typeof(ICommand))]
[DisplayName("<Name to display>")]
public class MyCommand : ICommand

Et eksempel på en enkel kommando er vist i følgende kode. Kommandoen viser en meldingsboks og aktiveres når kartet ikke er lik null. I dette tilfellet brukes ikke hendelsen CanExecuteChanged.

[Export(typeof(ICommand))]
[DisplayName("Simple Command")]
public class SimpleCommand : ICommand
{
     public void Execute(object parameter)
     {
          // Show a message box when the command's ribbon button is clicked.
          MessageBox.Show("Simple command executed");
     } 
 
     public bool CanExecute(object parameter)
     {
          // Show as executable (i.e., enable the button on the ribbon) unless the map is null.
          return MapApplication.Current.Map != null;
     }
 
     public event EventHandler CanExecuteChanged;
}