2009-09-03 11 views
0

J'ai un contrôle wpf que je développe.Utilisation correcte de la propriété de dépendance

Ce contrôle contient et encapsule un autre contrôle.

Je souhaite exposer une propriété du contrôle interne à la fenêtre qui consomme le contrôle. Je veux aussi que le contrôle interne effectue une logique lorsque cette propriété a changé.

des suggestions?

+0

aucune erreur juste doesn » t travail ... je dois définir des métadonnées sur les deux propriétés. –

Répondre

2

Les contrôles interne et externe doivent définir les propriétés de dépendance. Le modèle de contrôle externe devrait inclure le contrôle interne, et doit lier les propriétés ensemble:

<local:InnerControl SomePropertyOnInnerControl="{TemplateBinding SomePropertyOnOuterControl}"/> 

Cela garantit à la fois vos commandes sont indépendamment utilisables et découplée de eachother. Les propriétés peuvent être nommées en fonction de leur utilisation dans ce contrôle. Par exemple, le contrôle interne peut l'appeler quelque chose comme Text tandis que le contrôle externe l'utilise dans un but plus spécifique comme CustomerName.

+0

C'est l'approche correcte; une propriété proxy n'est pas DependencyProperty et ne vous donnera pas un comportement de liaison correct. – AndyM

0

Les mises à jour des propriétés de dépendance sont gérées via des métadonnées de propriété, définies dans le cadre de DependencyProperty. (Il peut également être ajouté à DPs existants, mais qui est un autre sujet.)

Définir votre DependencyProperty avec des métadonnées:

public static readonly DependencyProperty MyValueProperty = 
    DependencyProperty.Register("MyValue", typeof(object), typeof(MyControl), 
    new UIPropertyMetadata(null, new PropertyChangedCallback(MyValue_PropertyChanged))); 

pratiques de votre rappel:

private static void MyValue_PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
{ 
    MyControl c = (MyControl)d; 
    c.DoSomething(); 
} 
Questions connexes