2016-05-11 3 views
0

Comment désactiver les méthodes de rappel d'appel dans MyDP1_Changed et MyDP1_Changed? Je besoin de rappel dissable quand je change la valeur d'une autre méthode de rappelComment désactiver le rappel 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

si vous voulez mantenir les deux propriétés avec les mêmes valeurs toujours ... pourquoi ne pas utiliser seulement 1 propriété? – Jose

+0

Un 'PropertyChangedCallback' est seulement appelé quand une valeur de propriété * réellement * change. Votre problème ici semble être une faute de frappe dans 'MyDP2_Changed'. Il devrait probablement définir 'e.NewValue' au lieu de' e.OldValue'. Alors il n'y aurait pas de récursion infinie. – Clemens

+0

C'est un exemple simple. J'ai besoin de callback dissable quand je change la valeur de l'autre méthode de rappel –

Répondre

1

OK d'abord, vous devez utiliser SetCurrentValue pas SetValue - sinon vous soufflez vos fixations vous.

Deuxièmement, vous pouvez utiliser ces méthodes pour ajouter temporairement et enlever callbacks

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

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

Merci! C'est du travail! –