Прослушивание изменений в IsEnabled на элементе Wpf - PullRequest
5 голосов
/ 04 августа 2011

Я хочу прослушать изменения свойства IsEnabled в элементах WPF (чтобы я мог запускать некоторый общий код всякий раз, когда он изменяется) без необходимости загружать код в каждое окно / страницу.

Я также хочу избежать любых потенциальных проблем с утечками памяти из-за сильных слушателей событий.Я сталкивался с некоторыми статьями, которые предлагают использовать слабых слушателей событий и т. Д., Но это кажется очень сложным для чего-то, что кажется очень простым.

Я не хочу создавать подклассы элементов управления, чтобы сделать это, поскольку есть несколько типов элементов управления (и, возможно, больше в будущем), которые я хочу прослушивать для изменения IsEnabled.

Кто-нибудь придумал более аккуратный способ справиться с этим?

Ответы [ 2 ]

4 голосов
/ 28 января 2013

Событие Control.EnabledChanged существует

4 голосов
/ 04 августа 2011

Удачным решением этой проблемы было бы создание пользовательского присоединенного свойства и настройка односторонней привязки со свойством IsEnabled в качестве источника:

<Control IsEnabled={Binding IsEnabledProperty}
         AttachedProperty={Binding RelativeSource={RelativeSource Self}, Path=IsEnabled, Mode=OneWay}"/>

Это позволяет вам обрабатывать общие функции в прикрепленномизмененный обработчик свойства (который может включать запуск настраиваемого перенаправленного события, поскольку IsEnabled является обычным событием CLR и не всплывает).

...