Получение PropertyChangedCallback свойства зависимости всегда - Silverlight

У меня есть свойство зависимости и обратный вызов.

public static readonly DependencyProperty IsBusyProperty =
            DependencyProperty.Register("IsBusy", typeof(bool), 
            typeof(TabHost), new PropertyMetadata(false, IsBusyPropertyChangedCallback));

private static void IsBusyPropertyChangedCallback(DependencyObject o,
                   DependencyPropertyChangedEventArgs args)
{
/* .. */
}

Предположим, значение свойства false и кто-то снова устанавливает это falseобратного вызова никогда не происходит. Есть ли способ заставить обратный вызов происходить всегда?

1 ответ

Решение

Нет, нет Silverlight вызывает PropertyChangedCallback, только если свойство действительно изменилось. Silverlight считает, что если ваш TabHost раньше не был занят и теперь он не занят, то ничего не изменилось, и вы не хотите приставать к ложному уведомлению.

Если вы хотите получать уведомления о том, чтобы оставаться в том же состоянии, вы можете пересмотреть свой дизайн: например, вызывая метод RefreshBusyState, а не полагаясь на уведомление об изменении. Ваш вариант использования вращается вокруг кода пользователя, задающего свойство (а не системы Silverlight DP, задающей свойство). Итак, первый вопрос: должно ли это быть свойством зависимости? Если вам не нужно связывать, стилизовать или анимировать его, это может быть обычное свойство CLR, и вы можете вызывать ложные уведомления об изменениях в установщике, если захотите. Если это должен быть DP, но вы хотите знать, когда его устанавливает пользовательский код, тогда сделайте настройщик свойства CLR частным и вместо этого предоставьте метод SetBusyState: опять же, этот метод может выполнять любую логику изменений, которую вы захотите. Этот метод не будет запускаться, когда Silverlight перепривязывает, стилизует или анимирует свойство, но он запускается, если клиентский код явно его устанавливает.

Другие вопросы по тегам