3

DataGridTemplateColumn(例: )であるコントロールのバインディング値を取得するには、リフレクションを使用する必要がありますHyperLinkButton。誰も私がこれを行う方法を知っていますか?

TextBlock依存関係プロパティがあるため、 a でこれを行うのは簡単に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ますか?

4

1 に答える 1

2

そのフィールドに正しいバインディング フラグを追加しようとしましたか? リフレクションを使用する場合、不適切なバインディング フラグの場合のように聞こえます。TextBlock には Text 静的フィールドが TextBlock にあり、HyperlinkBut​​ton には ContentControl から継承された Content があります。

Static & Public & FlattenedHierarchy バインディング フラグを使用してみてください。

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

FlattenHierarchy リフレクション バインディング フラグを追加すると、リフレクションに、クラス階層を検索して public static フィールドを見つけるように指示する必要があります。

于 2010-03-22T22:44:22.093 に答える