Как использовать отражение для получения связывания (и значения) для элементов управления, имеющих ContentProperty в Silverlight

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

Вопрос

Мне нужно использовать отражение, чтобы получить значение привязки в управлении, которое DataGridTemplateColumn (например HyperLinkButton) Кто -нибудь знает, как я могу это сделать?

Кажется достаточно простым, чтобы сделать это с TextBlock Потому что у него есть TextProperty свойство зависимости, но я не могу получить привязанное выражение от контроля, которое не имеет немедленного TextProperty. Анкет Вот код, который я использую для получения привязки для выражения для TextBlock:

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

Однако следующий код никогда не работает для объекта зависимости, который HyperLinkButton:

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

Кто -нибудь знает, как я смогу получить BindingExpression (и связывающая ценность) для содержания HyperLinkButton?

Это было полезно?

Решение

Вы пробовали добавить правильные флаги для привязки для этого поля? Это звучит как случай неадекватных привязывающих флагов при использовании отражения. TextBlock имеет текстовое статическое поле прямо на TextBlock, где, как HyperlinkButton имеет контент, унаследованный от ContentControl.

Попробуйте использовать статические и общедоступные и сплюстных флажков привязки:

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

Добавление флага привязки Fallenhierarchy Refluection должно сообщать о размышлении, чтобы посмотреть в классовой иерархии, чтобы найти это публичное статическое поле.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top