2016-05-11 8 views
0

MyDP1_ChangedおよびMyDP1_Changedでコールバックメソッドを無効にするにはどうすればよいですか?私は、他のコールバックメソッドDependencyPropertyコールバック

class MyDependencyObject : DependencyObject 
{ 

     public object MyDP1 { 
      get{ return GetValue(MyDP1Property); } 
      set{ return SetValue(MyDP1Property, value); } 
     } 

     public object MyDP2 { 
      get{ return GetValue(MyDP2Property); } 
      set{ return SetValue(MyDP2Property, value); } 
     } 

     public static readonly DependencyProperty MyDP1Property = 
      DependencyProperty.Register("MyDP1", typeof(object), typeof(MyDependencyObject) 
      , new UIPropertyMetadata(MyDP1_Changed)); 

     public static readonly DependencyProperty MyDP2Property = 
      DependencyProperty.Register("MyDP2", typeof(object), typeof(MyDependencyObject) 
      , new UIPropertyMetadata(MyDP2_Changed)); 

     private static void MyDP1_Changed(DependencyObject d, DependencyPropertyChangedEventArgs e) 
     { 
      d.SetValue(MyDP2Property, e.NewValue); 
     } 

     private static void MyDP2_Changed(DependencyObject d, DependencyPropertyChangedEventArgs e) 
     { 
      d.SetValue(MyDP1Property, e.OldValue); 
     } 
} 
+1

コールバックを追加および削除するには、これらのメソッドを使用できますか? – Jose

+0

'PropertyChangedCallback'は、プロパティ値*が実際に変更されたときにのみ呼び出されます。ここの問題は 'MyDP2_Changed'のタイプミスです。おそらく 'e.OldValue'ではなく' e.N​​ewValue'を設定するべきです。それでは、無限の再帰はありません。 – Clemens

+0

これは簡単な例です。私は他のコールバックメソッドから値を変更するときに、不快なコールバックが必要です。 –

答えて

1

から値を変更したときに、私はdissableコールバックを必要とする はOK、まず、あなたはSetCurrentValueないSetValueを使用する必要がある - そう、あなたのバインディングを吹くだろう。ちょうど1プロパティを使用していけない理由

第二に、あなたは...あなたがいつも同じ値との両方の性質をmantainしたい場合は、一時的に

TypeDescriptor.GetProperties(d)["MyDP1"].RemoveValueChanged(d, MyDP1_Changed) 

TypeDescriptor.GetProperties(d)["MyDP1"].AddValueChanged(d, MyDP1_Changed) 
+0

ありがとうございます!その仕事! –

関連する問題