2016-05-11 13 views
0

Wie kann ich Callback-Methoden in MyDP1_Changed und MyDP1_Changed deaktivieren? Ich brauche dissable Rückruf, wenn ich Wert von anderer Methode Rückruf ändernWie kann der DependencyProperty-Rückruf deaktiviert werden?

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

, wenn Sie beiden Eigenschaften mit den gleichen Werten pflegen wollen immer ... warum nur 1 Objekt nicht verwenden? – Jose

+0

Ein 'PropertyChangedCallback' wird nur dann aufgerufen, wenn sich ein Eigenschaftswert * tatsächlich * ändert. Ihr Problem scheint hier ein Tippfehler in 'MyDP2_Changed' zu sein. Es sollte wahrscheinlich 'e.NewValue' anstelle von' e.OldValue' gesetzt werden. Dann würde es keine unendliche Rekursion geben. – Clemens

+0

Es ist ein einfaches Beispiel. Ich brauche dissable Callback, wenn ich den Wert von anderen Callback-Methode –

Antwort

1

OK Zum einen müssen Sie SetCurrentValue nicht SetValue verwenden - sonst werden Sie Ihre Bindungen blasen.

Zweitens können Sie diese Methoden verwenden, um vorübergehend hinzuzufügen und zu entfernen Rückrufe

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

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

Vielen Dank! Es ist Arbeit! –