我有一个依赖属性和一个回调。
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
,则回调永远不会发生。有没有办法强制回调始终发生?
答案 0 :(得分:3)
不,没有。仅当属性实际更改时,Silverlight才会调用PropertyChangedCallback。 Silverlight的原因是,如果你的TabHost之前没有忙碌,现在它不忙,那么一切都没有改变,你不想被虚假的通知所纠缠。
如果您依赖于获取保持相同状态的通知,则可能需要重新检查设计:例如,调用RefreshBusyState方法而不是依赖更改通知。您的用例围绕用户代码设置属性(而不是设置属性的Silverlight DP系统)。所以第一个问题是这需要一个依赖属性吗?除非您需要绑定,设置样式或为其设置动画,否则它可能是正常的CLR属性,如果您愿意,可以在setter中引发虚假更改通知。如果它确实需要是DP,但您想知道用户代码何时设置它,那么请将CLR属性设置器设置为私有,并提供SetBusyState方法:再次,该方法可以执行您想要的任何更改逻辑。当Silverlight重新绑定,样式或动画属性时,该方法不会运行,但如果客户端代码显式设置它,它将运行。