2012-02-20 11 views
5

Tengo en mi ViewModel un evento.Eventos en ViewModel con System.Windows.Interactivity.EventTrigger, ¿es una referencia débil?

public class MyViewModel:ViewModelBase 
{ 
    ... 
    public event EventHandler SomethingChanged; 

    private void FireEvent() 
    { 
      if (SomethingChanged != null) 
       SomethingChanged(this, EventArgs.Empty); 
    } 
    ... 
} 

En mi vista, utilicé el EventTrigger para escuchar el evento para invocar una acción.

<i:Interaction.Triggers>    
     <i:EventTrigger EventName="SomethingChanged" SourceObject="{Binding}"> 
      <i:SomeAction/> 
     </i:EventTrigger> 
</i:Interaction.Triggers> 

Funciona perfectamente bien. Sin embargo, tengo curiosidad si hay una posibilidad de pérdida de memoria. Como mi Vista se crea a pedido, lo que significa que el control se agrega y elimina del árbol Visual en función del usuario. El objeto fuente (ViewModel) tiene una vida más larga que el oyente (View). Por lo tanto, utilizando el código anterior, ¿el evento aún tendrá una fuerte referencia al oyente eliminado (Vista)?

Respuesta

2

En el OnDetaching del EventTriggerBase, llama al siguiente código:

this.OnSourceChanged(this.Source, null); 

Esto significa que la fuente se está estableciendo desde el código fuente en nulo y el evento es de baja. No hay pérdidas de memoria cuando la vista está descargada correctamente, lo que significa que se llama al método Detach.

Cuestiones relacionadas