我有一个自定义 WPF 控件。它有一个典型的DependencyProperty
,我们称之为Status
,通过绑定定期更新。 (更具体地说,它绑定到一个根据发送通知的属性INotifyPropertyChanged
).
我想实现某种“过期”行为:如果Status
一段时间没有更新,就会发生一些事情。理想情况下,这个逻辑应该在我的自定义控件内(我有很多实例)。我设置了一个DispatcherTimer
in the Status
更改处理程序并执行我需要的操作。一切都很好。
问题通常是,Status
更新为相同的值,即实际上没有改变。但即使在这种情况下,它也应该重置过期计时器。
即使我强制我的视图模型(实现INotifyPropertyChanged
)发送分配通知,无论值是否更改,WPFDependencyProperty
实现足够智能,可以自行检查更改,并且不会调用我的PropertyChangeCallback
我注册的Status
(in FrameworkPropertyMetadata
).
最好的做法是什么?
我可以创建另一个DependencyProperty
在我的控制下,我总是会在分配时改变Status
(例如,分配一个随机数或翻转bool
),并在那里进行计时器处理。但这似乎是一种丑陋且非常迂回的方式,尤其是使用起来。
只是为了回答我自己的问题并至少提供一些解决方案,最后我做了@Janne 的建议。我做了一个包装类int
,因此每个赋值都会创建一个新对象并被如此对待。 (我没有覆盖Equals
数值比较的方法Status
,因此DP只能使用对象身份检查)。
缺点是,这肯定会产生大量小垃圾(在应用程序的整个生命周期中每秒有 100 多个实时分配),但这不是问题;尤其是无论如何,WPF 都会封装所有内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)