Extensión de Visual Studio MEF – Forzar los glifos de margen para actualizar o volver a dibujar

La extensión en la que estoy escribiendo comenzó su vida desde el Tutorial: Creación de un ejemplo de glifo de margen provisto por Microsoft: https://msdn.microsoft.com/en-us/library/ee361745.aspx

Todo funciona bien, excepto que estoy intentando desencadenar el redibujado o la actualización de los glifos de margen cuando los datos que utilizo para decidir qué línea dibujar un glifo en los cambios.

Básicamente tengo un botón en una ventana de herramientas, cuando el usuario hace clic en el botón, quiero que aparezca un glifo en el margen. En este momento, no aparece hasta que se aleja y retrocede, o obviamente cierra y vuelve a cargar el documento.

He investigado esto y he visto algunos ejemplos de código que utilizan IViewTaggerProvider en lugar de ITaggerProvider. En esos casos, parece que un controlador para un evento LayoutChanged se puede agregar a la clase derivada de ITagger que también contiene el método GetTags. Sin embargo, no pude cambiar exitosamente el código de usar ITaggerProvider a IViewTaggerProvider, la extensión se bloqueó cuando se ejecutó. No sé si este es un cambio que llevará a la solución o si es innecesario.

¿Cómo puedo forzar el glifo para obtener renderizado? ¿Puedo crear un evento de algún tipo para forzar el código GetTags para que se ejecute? ¿Cómo podría levantar ese evento desde fuera de la clase? Desde la ventana de herramientas por ejemplo?

    Estabas en el camino correcto, cambiando de ITaggerProvider a IViewTaggerProvider me permitió volver a dibujar los glifos. Utilicé la sección Implementando un Brace Matching Tagger Provider en Tutorial: Mostrar el ejemplo de Brace Matching Braces para hacer estos cambios.

    Usando el IViewTaggerProvider, puedes llamar

    TagsChanged?.Invoke(this, new SnapshotSpanEventArgs( new SnapshotSpan( SourceBuffer.CurrentSnapshot, 0, SourceBuffer.CurrentSnapshot.Length))); 

    en sus funciones para llamar explícitamente a GetTags y revisar los tramos en la instantánea actual.