Как использовать отражение для получения связывания (и значения) для элементов управления, имеющих ContentProperty в Silverlight
-
21-09-2019 - |
Вопрос
Мне нужно использовать отражение, чтобы получить значение привязки в управлении, которое 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 должно сообщать о размышлении, чтобы посмотреть в классовой иерархии, чтобы найти это публичное статическое поле.