Llamar automáticamente a OnDetaching () para comportamientos de Silverlight

Estoy usando varios comportamientos y desencadenantes de Blend en un control Silverlight. Me pregunto si hay algún mecanismo para desconectar automáticamente o garantizar que se solicite a OnDetaching () un comportamiento o desencadenante cuando el control ya no se usa (es decir, se elimina del árbol visual).

Mi problema es que hay una pérdida de memoria administrada con el control debido a uno de los comportamientos. El comportamiento se suscribe a un evento en algún objeto de larga duración en la anulación OnAttached () y debe darse de baja de ese evento en la anulación OnDetaching () para que pueda convertirse en un candidato para la recolección de basura. Sin embargo, parece que nunca se llama a OnDetaching () cuando elimino el control del árbol visual ... la única forma en que puedo hacer que ocurra es desconectando explícitamente los comportamientos problemáticos ANTES de eliminar el control y luego se recoge correctamente la basura .

En este momento, mi única solución era crear un método público en el código subyacente para el control que puede pasar y separar cualquier comportamiento conocido que pueda causar problemas de recolección de basura. Depende del código del cliente saber cómo llamar a esto antes de quitar el control del panel. Realmente no me gusta este enfoque, así que estoy buscando una forma automática de hacerlo que estoy pasando por alto o una mejor sugerencia.

public void DetachBehaviors()
{
     foreach (var behavior in Interaction.GetBehaviors(this.LayoutRoot))
     {
          behavior.Detach();
     }

     //continue detaching all known problematic behaviors on the control....
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta