2013-12-18 72 views
0

我正在使用DepdendencyObject s和PropertyChangedCallback s,我想檢測此回調中的子屬性更改。該proplem是DependencyPropertyChangedEventArgs -Object只讓我看到包含DP包含更改屬性的屬性。有沒有辦法達到這個子屬性?檢測PropertyChangedCallback中的子屬性更改並獲取子屬性

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)。

+0

你需要一個更位代碼,所以我們可以幫忙 –

+0

我增加了一些代碼 – HerpDerpington

+0

你的綁定將正確地聽子屬性。我會猜測你沒有使用綁定來聽這個改變? –

回答

1

推導出你的ComplexObject,從Freezable(和執行Freezable)應該夠了還是不行?

根據MSDN文檔:

從Freezable派生的收益如下特徵的類:

  • 特殊狀態:只讀(凍結)狀態和可寫狀態。
  • 線程安全:可以跨線程共享一個凍結的Freezable對象。
  • 詳細更改通知:與其他DependencyObject對象不同,Freezable對象在子屬性值更改時提供更改通知。
  • 易克隆:Freezable類已經實現了幾種生成深克隆的方法。