J'ai un contrôle personnalisé, un curseur de plage, qui est utilisé dans l'une de mes vues.Événements de désabonnement dans le contrôle WPF
Le constructeur ressemble à ceci:
EventHandler ReCalculateWidthsHandler;
public RangeSlider()
{
ReCalculateWidthsHandler = OnReCalculateWidths;
DependencyPropertyDescriptor.FromProperty(ActualWidthProperty, typeof(RangeSlider)).
AddValueChanged(this, ReCalculateWidthsHandler);
}
Je ne sais pas quand/comment je peux unscubscribe que gestionnaire d'événements. Il n'y a pas de méthode Dispose dans Control. Y a-t-il un moyen de m'informer que le contrôle est éliminé/supprimé afin que je puisse me désinscrire des événements auxquels je m'abonne?
Cela peut être une question plus générale: Étant donné un contrôle personnalisé qui étend le contrôle, comment pouvez-vous savoir quand il est éliminé?
Merci.
Si je le modifiais pour m'abonner régulièrement à l'événement SizeChanged, où devrais-je me désabonner de cet événement lorsque le contrôle est éliminé? N'aurais-je pas une fuite de mémoire si je ne me suis pas désabonné? – Flack
Non. Il n'y aura pas de référence externe si vous souscrivez un gestionnaire à un événement de la même instance. –
Ah, oui. Cela m'a échappé. Disons qu'un autre contrôle a été transmis à mon contrôle personnalisé et que mon contrôle personnalisé s'est abonné à l'un de ses événements, quelque chose comme otherControl.SomeEvent + = SomeEventHandler. Quand est-ce que mon contrôle personnalisé se désinscrit de cet événement afin qu'une référence à otherControl ne soit pas conservée? – Flack