始终获取依赖项属性的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 ,则回调永远不会发生。 有没有办法强制回调始终发生?

不,没有。 仅当属性实际更改时,Silverlight才会调用PropertyChangedCallback。 Silverlight的原因是,如果你的TabHost之前没有忙碌,现在它不忙,那么一切都没有改变,你不想被虚假的通知所纠缠。

如果您依赖于获取保持相同状态的通知,则可能需要重新检查设计:例如,调用RefreshBusyState方法而不是依赖更改通知。 您的用例围绕用户代码设置属性(而不是设置属性的Silverlight DP系统)。 所以第一个问题是这需要一个依赖属性吗? 除非您需要绑定,设置样式或为其设置动画,否则它可能是正常的CLR属性,如果您愿意,可以在setter中引发虚假更改通知。 如果它确实需要是DP但您想知道用户代码何时设置它,那么将CLR属性设置器设置为私有,并提供SetBusyState方法:再次,该方法可以执行您想要的任何更改逻辑。 当Silverlight重新绑定,样式或动画属性时,该方法不会运行,但如果客户端代码显式设置它,它将运行。