2016-05-11 4 views
0

Как отключить методы call callback в MyDP1_Changed и MyDP1_Changed? мне нужно dissable обратного вызова при изменении значения из другого метода обратного вызоваКак отключить обратный вызов 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

если вы хотите его поддерживать оба свойства с одинаковыми значениями всегда ... почему не использовать только 1 недвижимость? – Jose

+0

«СвойствоChangedCallback» вызывается только когда изменяется значение свойства * на самом деле *. Ваша проблема здесь, похоже, опечатка в «MyDP2_Changed». Вероятно, он должен установить 'e.NewValue' вместо' e.OldValue'. Тогда не было бы бесконечной рекурсии. – Clemens

+0

Это простой пример. Мне нужно отменить обратный вызов, когда я изменяю значение из другого метода обратного вызова –

ответ

1

OK во-первых, вам нужно использовать SetCurrentValue не SetValue - иначе вы будете взрывать привязками.

Во-вторых, вы можете использовать эти методы, чтобы временно добавлять и удалять обратные вызовы

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

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

Спасибо! Это работает! –

 Смежные вопросы

  • Нет связанных вопросов^_^