【问题标题】:WPF DependencyProperty event before content changed内容更改前的 WPF DependencyProperty 事件
【发布时间】:2010-05-17 09:35:14
【问题描述】:

首先我将解释问题的背景,因为您也许可以为我指明一个更好的方向。

我需要在对象上实现类似撤消重做的系统。该对象具有一系列依赖属性。有些是 double、int、string,但有些也是 DependencyObject 类型。 我需要在更改之前保存属性的值,为此我添加了 CoerceValueCallback。

public static readonly DependencyProperty MyBackgroundProperty =
        DependencyProperty.Register("MyBackground", typeof(MyCustomizableBackground),
            typeof(MyComponent), new UIPropertyMetadata(default(MyCustomizableBackground), null, new CoerceValueCallback(OnPropertyChanging)));

在 OnPropertyChanging 中,我保存了更改之前的值。 MyCustomizableBackground 是 DependencyObject,它也有一些依赖属性。

问题是在这种情况下,我有一个自定义对象作为属性,OnPropertyChanging 方法没有被触发,但是当我有一个通用类型时,它被触发了。

后来编辑:我意识到我的部分问题很模棱两可,我问了一个单独的问题here。对于问题的第一部分,Julien 为我指明了一个更好的方向。

【问题讨论】:

    标签: wpf dependency-properties coerce


    【解决方案1】:

    在您的情况下,属性更改回调是构造函数的第二个参数,而不是您使用的第三个参数,即值强制回调。

    编辑:作为对您的评论的回应,请仔细检查 MyComponent 是否是拥有该属性的好类型。我记得前段时间在复制/粘贴 DP 并忘记更改拥有类型后遇到了类似的问题。

    【讨论】:

    • 是的,你是对的,我的方法名称不合适,但我希望在更改之前保存该值。这就是我使用 CoerceValueCallback 的原因。我更改了方法的名称。
    • 是的,但是 PropertyChanged 在参数中为您提供了 OldValue 和 NewValue,因此这正是您所需要的。调用 Coerce 并不意味着值已更改。
    • 你又是对的,你应该从一开始就解释这一点。但是问题依然存在,我的自定义对象属性更改没有调用该方法。
    猜你喜欢
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 2014-11-16
    相关资源
    最近更新 更多