Come utilizzare la riflessione per ottenere l'espressione di binding (e il valore) per i controlli con una proproperty di contenuto in Silverlight

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

Domanda

Devo usare la riflessione per ottenere il valore di legame in un controllo che è a DataGridTemplateColumn (per esempio HyperLinkButton). Qualcuno sa come potrei farlo?

Sembra abbastanza semplice farlo con a TextBlock Perché ha un TextProperty Proprietà della dipendenza, ma non riesco a ottenere un'espressione vincolante da un controllo che non ha immediato TextProperty. Ecco il codice che sto usando per acquisire l'espressione vincolante per a TextBlock:

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

Tuttavia, il seguente codice non funziona mai per un oggetto di dipendenza che è un HyperLinkButton:

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

Qualcuno sa come potrei essere in grado di ottenere il BindingExpression (e valore vincolante) per il contenuto di a HyperLinkButton?

È stato utile?

Soluzione

Hai provato ad aggiungere i flag di legame corretti per quel campo? Sembra un caso di bandiere vincolanti inadattate quando si utilizza la riflessione. TextBlock ha un campo statico di testo direttamente su Textblock, in cui l'hyperLinkButton ha ereditato il contenuto dal ContentControl.

Prova a usare le bandiere vincolanti statiche e pubbliche e appiattite:

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

L'aggiunta della bandiera vincolante per la riflessione di FlattenHerarchia dovrebbe dire a riflettere di guardare nella gerarchia di classe per trovare quel campo statico pubblico.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top