Manage annotation events effectively

In addition to controlling annotation changes via our create, update, and delete APIs, we also expose a number of events that can be used to intercept annotation changes that originate in the user interface (UI) by clicks from the user.

Event Use case
IAnnotation.Focused Fires when an annotation is focused.
IAnnotation.Unfocused Fires when an annotation loses focus.
IAnnotation.Pressed Fires when an annotation is pressed.
IAnnotation.Selected Fires when an annotation is selected.
IAnnotation.Deselected Fires when an annotation is deselected.
IAnnotationManager.AnnotationsChanged Fires when annotations change either due to user action or via the API.
IAnnotationManager.AnnotationsChanging Fires when a user starts or ends an interaction with an annotation.
IAnnotationManager.AnnotationsCreated Fires when a new annotation is created.
IAnnotationManager.AnnotationsDeleted Fires when annotations were deleted.
IAnnotationManager.AnnotationsLoaded Fires when annotations are loaded from annotation provider.
IAnnotationManager.AnnotationsSaving Fires before annotations will be saved.
IAnnotationManager.AnnotationsSaved Fires before annotations were saved.
IAnnotationManager.AnnotationsUpdated Fires when annotations were updated.
annotation.Focused += () => {
  Console.WriteLine("Annotation focused");
};

annotation.Unfocused += () => {
  Console.WriteLine("Annotation unfocused");
};

annotation.Pressed += (isSelected, preventDefault) => {
  Console.WriteLine("Annotation pressed");
};

annotation.Selected += () => {
  Console.WriteLine("Annotation selected");
};

annotation.Deselected += () => {
  Console.WriteLine("Annotation deselected");
};

annotationManager.AnnotationsChanged += () => {
  Console.WriteLine("Annotations changed");
};

annotationManager.AnnotationsChanging += (annotations, reason) => {
  if (reason.AnnotationsChaningReason.DrawEnd) {
    Console.WriteLine("Annotations changing");
  }
};

annotationManager.AnnotationsCreated += (annotations) => {
  foreach(var annotation in annotations) {
    Console.WriteLine(annotation.id);
  }
};

annotationManager.AnnotationsDeleted += (annotations) => {
  foreach(var annotation in annotations) {
    Console.WriteLine(annotation.id);
  }
};

annotationManager.AnnotationsLoaded += (annotations) => {
  foreach(var annotation in annotations) {
    Console.WriteLine(annotation.id);
  }
};

annotationManager.AnnotationsSaving += () => {
  Console.WriteLine("Saving annotations");
};

annotationManager.AnnotationsSaved += () => {
  Console.WriteLine("Saved annotations");
};

annotationManager.AnnotationsUpdated += (annotations) => {
  foreach(var annotation in annotations) {
    Console.WriteLine(annotation.id);
  }
};