2012-02-20 19 views
5

Mam w moim ViewModel zdarzenie.Zdarzenia w ViewModel z System.Windows.Interactivity.EventTrigger, czy to słabe odwołanie?

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

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

moim zdaniem, użyłem EventTrigger słuchać Event, aby wywołać akcję.

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

Działa doskonale. Jednak jestem ciekawy, czy istnieje możliwość wycieku pamięci? Ponieważ mój widok jest tworzony na żądanie, co oznacza, że ​​kontrola jest dodawana i usuwana z drzewa wizualnego na podstawie użytkownika. Obiekt źródłowy (ViewModel) ma dłuższy czas życia niż słuchacz (widok). W związku z tym, używając powyższego kodu, czy zdarzenie nadal będzie miało silne odniesienie do usuniętego słuchacza (widok)?

Odpowiedz

2

W OnDetaching z EventTriggerBase, wywołuje poniższy kod:

this.OnSourceChanged(this.Source, null); 

Oznacza to, że źródło jest ustawiony od Źródło null a zdarzenie jest anulowana. Brak pamięci, gdy widok jest poprawnie rozładowany, co oznacza, że ​​wywoływana jest metoda Detach.

Powiązane problemy