2011-10-25 10 views
7

Per effettuare una molto lunga storia breve ... Questo è in un grande progetto di WPFQuando viene creato PropertyChangedEventManager e quando viene allegato?

Ho una classe “Paziente” che implementa INotifyPropertyChanged. Quando dispongo questa classe, sto verificando che lo PropertyChangedEventHandler sia nullo e se non lo si esegue in una classe ListenerDetector che registra gli ascoltatori in modo che possiamo rintracciarli e pulire le perdite. Il paziente ha alcune proprietà legate agli elementi WPF e ad altri oggetti che usano il suo PropertyChanged per monitorare le modifiche.

Dopo smaltire tutto il resto, il mio risultato di log è il seguente:

Log: Il paziente ha ancora il seguente ascoltatore (s) allegato: - System.ComponentModel.PropertyChangedEventManager

Domanda: quando è il PropertyChangedEventManager creato?

  • quando il paziente viene creata
  • Quando WPF si lega alla proprietà Paziente
  • qualche altro punto.

Se Patient.PropertyChangedEventHandler è impostato su null e quindi scollegato dal PropertyChangedEventManager c'è un modo per ricreare il Gestore e l'hanno ascoltare di nuovo il Patient.PropertyChangedEventHandler? Si prega di non chiedere il motivo per cui questo sarebbe accaduto, che è un punto di tensione qui :-(

risposta

7

Il PropertyChangedEventManager viene creato da WPF per sostenere vincolante a qualsiasi classe che implementa INotifyPropertyChanged. Sara 'creato e utilizzato come Non appena si associa a qualsiasi classe che implementa INotifyPropertyChanged.

detto questo, la sua un'implementazione del modello WeakEventManager. Mentre è ancora mostrando un ascoltatore allegato, si rendono conto che questo listener è collegato con il Weak Event Pattern. questo andrà non appena si verifica una raccolta completa dei rifiuti, poiché utilizza i riferimenti deboli per mantenere l'abbonamento. Pertanto, questo specifico abbonamento non dovrebbe essere la causa di una perdita di memoria (a lungo termine).

Problemi correlati