Cómo usar la reflexión para obtener el bindingExpression (y el valor) para los controles que tienen una contenido de propertia en Silverlight

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

Pregunta

Necesito usar la reflexión para obtener el valor de enlace en un control que es un DataGridTemplateColumn (p.ej HyperLinkButton). ¿Alguien sabe cómo podría hacer esto?

Parece lo suficientemente simple como para hacer esto con un TextBlock Porque tiene un TextProperty propiedad de dependencia, pero parece que no puedo obtener una expresión vinculante de un control que no tiene un TextProperty. Aquí está el código que estoy usando para adquirir la expresión vinculante para un TextBlock:

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

Sin embargo, el siguiente código nunca funciona para un objeto de dependencia que es un HyperLinkButton:

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

¿Alguien sabe cómo podría obtener el BindingExpression (y valor vinculante) para el contenido de un HyperLinkButton?

¿Fue útil?

Solución

¿Ha intentado agregar las banderas de enlace correctas para ese campo? Suena como un caso de banderas de encuadernación inadecuadas cuando se usa Reflection. TextBlock tiene un campo estático de texto directamente en TextBlock, donde HyperlinkButton tiene contenido heredado de ContentControl.

Intente usar las banderas de encuadernación Static & Public & Fltanenedhierchy:

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

Agregar la bandera de encuadernación de reflexión de la Flattenhierarquía debería decirle a la reflexión que busque en la jerarquía de clases para encontrar ese campo estático público.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top