首先,我将解释问题的背景,因为您也许可以为我指明更好的方向。
我需要在对象上实现类似撤消重做的系统。该对象具有一系列依赖属性。有些是 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 为我指明了一个更好的方向。