我有一个依赖属性和一个回调。
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 重新绑定属性、设置样式或为属性设置动画时,该方法不会运行,但如果客户端代码显式设置它,它将运行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)