首先,我将解释问题的背景,因为您可能能够指出我更好的方向。
我需要在对象上实现类似undo-redo的系统。该对象具有一系列依赖项属性。有些是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。对于问题的第一部分,朱利安指出了一个更好的方向。
答案 0 :(得分:1)
属性更改回调是你的情况下构造函数的第二个参数,而不是你使用的第三个参数,它是值强制回调。
编辑:在回复你的评论时,仔细检查MyComponent是拥有该属性的好类型。我记得在复制/粘贴DP并忘记更改拥有类型之前不久前有类似的问题。