Отмена подписки на события в WPF Control - PullRequest
1 голос
/ 15 апреля 2011

У меня есть пользовательский элемент управления, ползунок диапазона, который используется в одном из моих представлений.

Конструктор выглядит так:

        EventHandler ReCalculateWidthsHandler;
        public RangeSlider()
        {
            ReCalculateWidthsHandler = OnReCalculateWidths;
            DependencyPropertyDescriptor.FromProperty(ActualWidthProperty, typeof(RangeSlider)).
                AddValueChanged(this, ReCalculateWidthsHandler);
        }

Я не знаю, когда и какЯ могу отписаться от этого обработчика событий.В Control нет метода Dispose.Можно ли как-то уведомить меня о том, что элемент управления удаляется / удаляется, чтобы я мог отменить подписку на любые подписанные события?

Это может быть более общий вопрос: если пользовательский элемент управления расширяет элемент управления, как вы можетескажи когда утилизируется?

Спасибо.

1 Ответ

2 голосов
/ 15 апреля 2011

Обычно вы должны использовать OverrideMetadata , чтобы добавить обработчик изменений для свойства зависимости.К сожалению, это не работает только для чтения.Вот почему вы используете дескриптор свойства, я думаю.Вы знаете, что этот способ слишком сложен, потому что AddValueChanged хранит статические сильные ссылки, которые вызывают утечку памяти.Я думаю, что вы должны вызывать ReCalculateWidthsHandler из события SizeChanged вместо подписки на дескриптор свойства.

...