Как использовать отражение, чтобы получить BindingExpression (и значение) для элементов управления, имеющих ContentProperty в Silverlight - PullRequest
3 голосов
/ 23 марта 2010

Мне нужно использовать отражение, чтобы получить значение привязки в элементе управления, 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?

1 Ответ

2 голосов
/ 23 марта 2010

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

Попробуйте использовать флаги привязки Static & Public & FlateredHierarchy:

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

, добавив отражение FlattenHierarchyфлаг связывания должен указывать отражению искать в иерархии классов, чтобы найти это открытое статическое поле.

...