【发布时间】:2016-12-03 21:23:10
【问题描述】:
我有一个自定义 WPF 控件。它有一个典型的DependencyProperty,我们称之为Status,通过绑定定期更新。 (更具体地说,它绑定到一个根据INotifyPropertyChanged发送通知的属性。
我想实现某种“过期”行为:如果Status 在一段时间内没有更新,就会发生一些事情。理想情况下,这个逻辑应该在我的自定义控件中(我有很多实例)。我在Status 更改处理程序中设置了DispatcherTimer 并执行我需要的操作。一切都好。
问题在于,Status 通常会更新为相同的值,即实际上并没有改变。然而即使在这种情况下,它也应该重置过期计时器。
即使我强制我的视图模型(实现 INotifyPropertyChanged)发送分配通知,无论值是否更改,WPF DependencyProperty 实现也足够聪明,可以自行检查更改,并且不会调用我注册为Status 的PropertyChangeCallback(在FrameworkPropertyMetadata 中)。
最好的办法是什么?
我可以在我的控制下创建另一个DependencyProperty,我总是会在分配给Status时更改它(例如,分配一个随机数或翻转一个bool),并在那里进行我的计时器处理。但这似乎是一种丑陋且非常迂回的方式,尤其是使用。
【问题讨论】:
-
如果您的状态是文本,只需创建一个具有文本属性的包装类 Status,并且在更新时始终创建一个新实例。
-
@JanneMatikainen,不,它是一个整数,但它仍然是一个有效的想法......
标签: .net wpf custom-controls dependency-properties