Comment utiliser la réflexion pour obtenir le BindingExpression (et la valeur) pour les contrôles ayant une ContentProperty dans Silverlight

StackOverflow https://stackoverflow.com/questions/2496238

Question

Je dois utiliser la réflexion pour obtenir la valeur de liaison dans un contrôle qui est un DataGridTemplateColumn (par exemple HyperLinkButton). Est-ce que quelqu'un sait comment je pourrais le faire?

Il semble assez simple à faire cela avec un TextBlock parce qu'il a une propriété de dépendance TextProperty, mais je ne peux pas sembler obtenir une expression de liaison d'un contrôle qui ne dispose pas d'un TextProperty immédiat. Voici le code que je utilise pour acquérir l'expression de liaison pour une TextBlock:

FrameworkElement fe = (FrameworkElement)dependencyObj;
FieldInfo fi = fe.GetType().GetField("TextProperty");
BindingExpression bindingExpression = fe.GetBindingExpression((DependencyProperty)fi.GetValue(null))

Cependant, le code suivant ne fonctionne jamais pour un objet de dépendance qui est un HyperLinkButton:

FieldInfo fi = fe.GetType().GetField("ContentProperty");

Est-ce que quelqu'un sait comment je pourrais être en mesure d'obtenir la BindingExpression (et la valeur de liaison) pour le contenu d'un HyperLinkButton?

Était-ce utile?

La solution

avez-vous essayé d'ajouter les drapeaux de liaison correct pour ce champ? Cela ressemble à un cas de drapeaux de liaison inadaquate lors de l'utilisation de réflexion. TextBlock a le texte champ statique à droite sur TextBlock, où que HyperlinkButton a hérité de contenu ContentControl.

Essayez d'utiliser les drapeaux de liaison statique et publics et FlattenedHierarchy:

FieldInfo fi = fe.GetType().GetField("ContentProperty", BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy);

ajouter le drapeau de liaison réflexion FlattenHierarchy devrait dire la réflexion pour rechercher dans la hiérarchie des classes pour trouver ce champ statique public.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top