So che quando si registra un oggetto sugli eventi collegati al mouse, si verificano perdite di memoria. Ecco perché è necessario utilizzare WeakEvent pattern.In che modo i controlli WPF integrati gestiscono i gestori di eventi su un evento collegato?
Ho un problema con questo modello: se si desidera utilizzarlo, non è possibile definire il gestore nel codice XAML.
Per me, significa che ogni codice come questo perdite:
<SomeControl Mouse.MouseDown="MyHandler" />
A meno che non si rimuove il gestore esplicitamente nel codice (e dubito che qualcuno lo fa). Ora c'è qualcosa che non capisco:
<Button Click="MyHandler" />
Questo codice in qualche modo utilizzare qualche caso Mouse.MouseDown per rilevare un clic sul pulsante. Con alcune ricerche con reflector, ho scoperto che questo evento utilizza MouseDown della classe UIElement. E quando leggo il codice di UIElement non capisco: non c'è WeakEventManager!
Qualcuno può spiegarmi come UIElement riceve gli eventi da Mouse.MouseDown senza perdite?
Sono d'accordo con te, tuttavia il gestore di XAML su un evento collegato (non parlo degli eventi di controlli ma degli eventi come Mouse.MouseDown) può perdere, perché su di esso è sempre presente un riferimento. Internamente, la classe Button usa gli eventi Mouse.MouseDown (UIElement per essere specifici). E non so perché questo non perde. –
Buon punto. Gli eventi associati sono riferimenti esterni. –