0

DepdendencyObjects とともにsを使用してPropertyChangedCallbackおり、このコールバック内のサブプロパティの変更を検出したいと考えています。問題は、DependencyPropertyChangedEventArgs-Object ではDP、変更されたプロパティを含むプロパティのみが表示されることです。このサブプロパティに到達する方法はありますか?

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) ために呼び出されます。

4

1 に答える 1

1

ComplexObjectから を派生させるFreezable(および を実装するFreezable) だけで十分ですか?

MSDN ドキュメントによると:

Freezable から派生したクラスには、次の機能が追加されます。

  • 特別な状態: 読み取り専用 (フリーズ) 状態と書き込み可能な状態。
  • スレッド セーフ: 凍結された Freezable オブジェクトはスレッド間で共有できます。
  • 詳細な変更通知: 他の DependencyObject オブジェクトとは異なり、Freezable オブジェクトは、サブプロパティの値が変更されたときに変更通知を提供します。
  • 簡単なクローン作成: Freezable クラスには、ディープ クローンを作成するいくつかのメソッドが既に実装されています。
于 2014-01-31T20:27:18.417 に答える