2010-10-13 5 views
3

J'ai la prochaine propriété de dépendance:Comment fonctionne la propriété de dépendance?

public static DependencyProperty RequestObjectProperty = DependencyProperty.Register("RequestObject", typeof(RegistrationCardSearch), typeof(RegCardSearchForm),new UIPropertyMetadata(Changed)); 

    private static void Changed(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
     MessageBox.Show("Property Changed!!!"); 
    } 
    public RegistrationCardSearch RequestObject 
    { 
     get 
     { 
      return (RegistrationCardSearch)GetValue(RequestObjectProperty); 
     } 
     set 
     { 
      SetValue(RequestObjectProperty, value); 
     } 
    } 

et « changé » Méthode qui doivent tirer lorsque mes changements de propriété de dépendance. Mon type de propriété est RegistrashionCardSearch (classe). Lorsque je modifie les valeurs de propriété de la classe dans la propriété de dépendance, la propriété a changé de rappel non déclenché. Pourquoi?? Mon RegistrashionCardSearch interface de la classe interface INotifePropertyChanged

Répondre

1

Ronald déjà bien expliqué pourquoi votre approche ne fonctionne pas. Pour le faire fonctionner, vous devez vous abonner à l'événement PropertyChanged de votre RequestObject:

private static void Changed(DependencyObject d, DependencyPropertyChangedEventArgs e) 
{ 
    var form = (RegCardSearchForm)d; 

    if (e.OldValue != null) 
     ((RegistrationCardSearch)e.OldValue).PropertyChanged -= form.RequestObject_PropertyChanged; 
    if (e.NewValue != null) 
     ((RegistrationCardSearch)e.NewValue).PropertyChanged += form.RequestObject_PropertyChanged; 
} 

private void RequestObject_PropertyChanged(object sender, PropertyChangedEventArgs e) 
{ 
    MessageBox.Show("Property " + e.PropertyName + " changed!"); 
} 
3

L'événement modifié est déclenché uniquement lorsque la propriété elle-même change, et non lorsque vous modifiez des valeurs dans cette propriété. Pour donner un exemple qui provoque l'événement a changé au feu:

var requestObject = myObject.RequestObject; 
myObject.RequestObject = new RegistrationCardSearch() { ... }; 

Un événement a changé se déclenche pour la dernière ligne de cet exemple parce que la propriété change lui-même à une autre valeur.

Cependant, quand vous faites quelque chose comme ceci:

myObject.RequestObject.SomeProperty = newPropertyValue; 

l'événement a changé ne se déclenche pas parce que vous ne l'avez pas changé la propriété elle-même RequestObject, seule une valeur à l'intérieur de la propriété.

Questions connexes