【问题标题】:How do I clear the value set by SetCurrentValue in WPF?如何清除 WPF 中 SetCurrentValue 设置的值?
【发布时间】:2011-08-15 15:46:58
【问题描述】:

对于DependencyProperty,我使用DependencyObject.SetCurrentValue(property, value) 设置了一个值。如何取消设置值,以便属性再次评估为正常的本地值?

【问题讨论】:

    标签: wpf dependency-properties setcurrentvalue


    【解决方案1】:

    调用InvalidateProperty 将强制重新评估该值,并且它似乎忽略了“当前”值,因此它实际上会取消设置。

    【讨论】:

    • +1 这是一个更好的解决方案,因为 WPF 似乎已经跟踪了之前的值,即使它不是数据绑定的。
    • InvalidateProperty 仅在未分配绑定时恢复值。当它是 - 当前值不再是“临时的”,因为它立即进入绑定源。现在绑定源提供了新的价值。因此,当 InvalidateProperty 被调用时,它会更新绑定源。
    • @white.zaz 使用SetCurrentValue 时不正确。请注意,这与在属性分配时调用的常规 SetValue 不同。 SetCurrentValue 不会更新绑定源。
    • @nmclean SetCurrentValue 确实更新了绑定源。我为你创建了一个小例子dropbox.com/s/olotsz8muzdfrl4/SetCurrentValueTest.zip?dl=0
    • 来自 MSDN:“SetCurrentValue - 设置依赖属性的值而不更改其值源。”我相信您误解了“绑定源”和“价值源”之间的区别。
    【解决方案2】:

    我不相信您可以“取消设置”该值;您只需将值“重置”为先前保存的值。如果你没有那个,那你就是 OOL... -- Tejs

    我也不认为有办法做到这一点。此方法更改值而不是在 ladder of precedences 中添加覆盖。只需在覆盖之前获取值并将其存储在某处即可。

    【讨论】:

      猜你喜欢
      • 2019-09-11
      • 2019-12-16
      • 2011-08-08
      • 2020-03-15
      • 2015-04-29
      • 1970-01-01
      • 2013-04-14
      • 2013-01-06
      • 2013-12-29
      相关资源
      最近更新 更多