Получение PropertyChangedCallback свойства зависимости всегда - Silverlight - PullRequest
2 голосов
/ 31 марта 2010

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

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 Ответ

3 голосов
/ 31 марта 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...