2010-08-02 2 views
1

J'ai 2 contrôles A et B qui ont besoin de partager une propriété de dépendance.DependencyProperty.Register() utilisation?

A a la propriété définie par:

readonly static DependencyProperty PathProperty = DependencyProperty.Register ("PathProperty", typeof (string), typeof (A), nouveau PropertyMetadata (string.Empty, OnPathChanged)) ;

public string Path 
    { 
     get { return (string)GetValue(PathProperty); } 
     private set { SetValue(PathProperty, value); } 
    } 

    private static void OnPathChanged(DependencyObject dobj, DependencyPropertyChangedEventArgs args) 
    { 
     //Dos something 
    } 

A l'intérieur de la classe B, j'ai

readonly public static DependencyProperty Path = A.PathProperty.AddOwner (typeof (B));

public string Path 
    { 
     get { return (string)GetValue(Path); } 
     set { SetValue(Path, value); } 
    }  

Maintenant, si je mets la propriété de dépendance sur le chemin B ... explictly (à partir du code comme Binstance.Path = « valeur ») Je me attends OnPathChangedmethod à feu à l'intérieur d'un contrôle?

N'est-ce pas le comportement attendu ou ai-je oublié quelque chose? Comment puis-je faire fonctionner ça? ... i.e changer la propriété du chemin sur B devrait déclencher OnPAthChanged sur A

Merci!

Répondre

0

Je pense que vous avez mal compris le concept de DependencyProperties ... Deux contrôles séparés ne reçoivent pas les mises à jour des événements des autres - ni deux objets dérivés de dépendances ne reçoivent les notifications des changements d'autres objets (Par exemple si vous avez deux zones de texte - changer son TextProperty, ne fait rien à l'autre). Si vous voulez vraiment que votre deuxième type de contrôle déclenche la validation-callback statique, vous devez le rendre public et l'appeler dans votre enregistrement de DependencyProperty sur la classe B. Je ne le recommanderais pas - il vous donne un couplage très serré entre les deux classes qui autrement n'ont rien en commun (si je comprends votre exemple).