检测PropertyChangedCallback中的子属性更改并获取子属性

时间:2013-12-18 20:29:21

标签: c# wpf dependency-properties dependencyobject

我正在使用DepdendencyObjectPropertyChangedCallback s,我想检测此回调中的子属性更改。问题在于DependencyPropertyChangedEventArgs - 对象只让我看到包含DP的属性,其中包含已更改的属性。有没有办法达到这个Subproperty?

class MainClass : DepencencyObject
{
    public ComplexObject MainProperty
    {
        get { return (ComplexObject)GetValue(MainPropertyProperty); }
        set { SetValue(MainPropertyProperty, value); }
    }

    public static readonly DependencyProperty MainPropertyProperty =
        DependencyProperty.Register("MainProperty", 
        typeof(ComplexObject), typeof(MainClass), 
        new PropertyMetadata(new ComplexObject([...])));

    private static void MainProperty_PropertyChangedCallback(... DependencyPropertyChangedEventArgs e)
    {
        // Unable to detect a change, if 'ComplexObject.SubProperty'
        // changes; it is shown like a change of 'MainProperty'
    }
}

class ComplexObject : DepencencyObject
{
    public int SubProperty
    {
        get { return (int)GetValue(SubPropertyProperty); }
        set { SetValue(SubPropertyProperty, value); }
    }

    public static readonly DependencyProperty SubPropertyProperty =
        DependencyProperty.Register("SubProperty", 
        typeof(int), typeof(ComplexObject), 
        new PropertyMetadata(0));
}

有人

(new MainClass()).MainProperty.SubProperty = 100000;

并调用PropertyChangedCallback,因为MainProperty已更改(不是SubProperty)。

1 个答案:

答案 0 :(得分:1)

ComplexObject(并实施Freezable)获取Freezable应该是否足够?

根据MSDN文档:

从Freezable派生的类获得以下功能:

  • 特殊状态:只读(冻结)状态和可写状态。
  • 线程安全:可以跨线程共享冻结的Freezable对象。
  • 详细更改通知:与其他DependencyObject对象不同,Freezable对象在子属性值更改时提供更改通知。
  • 轻松克隆:Freezable类已经实现了几种产生深度克隆的方法。