Como usar a reflexão para obter a BindingExpression (e o valor) para os controles com um ContentProperty em Silverlight

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

Pergunta

Eu preciso usar a reflexão para obter o valor de ligação em um controle que é um DataGridTemplateColumn (por exemplo: HyperLinkButton). Alguém sabe como eu posso fazer isso?

Parece simples o suficiente para fazer isso com um TextBlock Porque tem um TextProperty propriedade de dependência, mas não consigo obter uma expressão vinculativa de um controle que não tenha um imediato TextProperty. Aqui está o código que estou usando para adquirir a expressão vinculativa para um TextBlock:

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

No entanto, o código a seguir nunca funciona para um objeto de dependência que é um HyperLinkButton:

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

Alguém sabe como eu posso conseguir o BindingExpression (e valor vinculativo) para o conteúdo de um HyperLinkButton?

Foi útil?

Solução

Você já tentou adicionar os sinalizadores de ligação corretos para esse campo? Parece um caso de sinalizadores de ligação inadaquados ao usar a reflexão. O TextBlock possui um campo estático de texto no texto, onde o HyperlinkButton tem o conteúdo herdado do ContentControl.

Tente usar as bandeiras de ligação estáticas e públicas e flattenedhierarchy:

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

Adicionar a bandeira de ligação à reflexão Flattenhierarchy deve dizer à reflexão para procurar na hierarquia de classes para encontrar esse campo estático público.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top