1

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

我需要在对象上实现类似撤消重做的系统。该对象具有一系列依赖属性。有些是 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 方法,但是当我有一个通用类型时,它会被触发。

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

4

1 回答 1

1

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

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

于 2010-05-17T10:39:10.957 回答