So verwenden Sie Reflexion, um die Bindingexpression (und den Wert) für Steuerelemente mit einem ContentProperty im Silverlight zu erhalten

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

Frage

Ich muss Reflexion verwenden, um den Bindungswert in einer Kontrolle zu erhalten, die a ist DataGridTemplateColumn (z.B HyperLinkButton). Weiß jemand, wie ich das machen könnte?

Es scheint einfach genug, dies mit einem zu tun TextBlock Weil es eine hat TextProperty Abhängigkeitseigenschaft, aber ich kann keinen bindenden Ausdruck aus einer Kontrolle bekommen, die keine unmittelbare Zeit hat TextProperty. Hier ist der Code, den ich verwende, um den verbindlichen Ausdruck für a zu erwerben TextBlock:

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

Der folgende Code funktioniert jedoch nie für ein Abhängigkeitsobjekt, das a ist HyperLinkButton:

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

Weiß jemand, wie ich das bekommen kann BindingExpression (und Bindungswert) für den Inhalt von a HyperLinkButton?

War es hilfreich?

Lösung

Haben Sie versucht, die richtigen Bindungsflags für dieses Feld hinzuzufügen? Es klingt nach Verwendung von Reflexionen nach einem Fall von inadaquatischen Bindungsflags. TextBlock hat ein statisches Feld des Texts direkt auf TextBlock, wobei HyperlinkButton Inhalte von ContentControl geerbt hat.

Versuchen Sie, die Bindungsflags für statische und öffentliche und flacheedhierarchie zu verwenden:

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

Das Hinzufügen der Flagge der Flachunghierarchie -Reflexion sollte die Reflexion erkennen, er solle in der Klassenhierarchie nachsehen, um dieses öffentliche statische Feld zu finden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top