2010-11-30 9 views
2

J'ai deux objets liés à la même dependencyProperty (dans Silverlight). Existe-t-il un moyen de déterminer lequel de ces deux objets a changé la propriété? Je souhaite effectuer différentes actions en fonction de ces informations.Comment déterminer ce qui a changé DependencyProperty

Malheureusement, je ne peux pas attacher deux eventhandlers différents (because it's a dependencyProperty)

public int StartTime 
    { 
     get { return (int)GetValue(StartTimeProperty); } 
     set { SetValue(StartTimeProperty, value); } 
    } 
    public static readonly DependencyProperty StartTimeProperty = 
     DependencyProperty.Register("StartTime", typeof(int), typeof(Step), 
     new PropertyMetadata(-1, new PropertyChangedCallback(OnStartTimeChanged))); 

    private static void OnStartTimeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
     ((Step)d).OnStartTimeChanged(e); 
    } 

    protected virtual void OnStartTimeChanged(DependencyPropertyChangedEventArgs e) 
    { 
     //if set from obj1 -> do something 
     //if set from obj2 -> do something else 
    } 

Dans cet exemple, je serais Propriété StartTime à partir d'objets différents et je veux savoir lequel de ces objets a changé la propriété.

Merci

+0

Quelle raison avez-vous besoin de savoir quel objet a changé la propriété? Si cela est requis, il semble que les exigences sont un peu incorrectes. Votre contrôle ne devrait pas être impliqué dans ce genre de décisions. –

+0

Eh bien, c'est une longue histoire. La propriété peut être modifiée à partir du serveur (la même propriété est également liée à l'interface utilisateur). Si la propriété a été modifiée par le serveur, elle doit mettre à jour l'interface utilisateur. Si la propriété a été modifiée par l'utilisateur (par interaction avec l'interface utilisateur), elle doit envoyer une mise à jour au serveur. –

+0

Pourquoi ne pas simplement avoir deux DP? –

Répondre

2

J'ai fini attraper un événement mouseDown sur le contrôle, donc je savais que la valeur d'un dependencyProperty était c pendu par l'interface utilisateur. Ce n'est pas la solution la plus propre, mais cela a fonctionné.

Un grand merci pour toutes vos suggestions.

3

Vous pouvez:

  • regard à l'expéditeur dans le gestionnaire d'événements
  • attach les contrôles aux différents gestionnaires d'événements
+0

J'ai mis à jour la question car probablement elle n'était pas assez descriptive. –

-1
var descriptor = DependencyPropertyDescriptor.FromProperty(YourType.StartTimeProperty , tpeof(YourType)); 
descriptor.AddValueChanged(obj1, OnStartTimeChanged1); 
descriptor.AddValueChanged(obj2, OnStartTimeChanged2); 
+0

DependencyPropertyDescriptor n'est pas disponible dans SL. –

Questions connexes