2

このフォーラム エントリ (http://stackoverflow.com/questions/2767557/wpf-get-property-that-a-control-is-bound-to-in-code-behind) は、「バインド」する次のステートメントを提供します。 「バインド元」の DependencyProperty からの PropertyPath:

BindingExpression be = BindingOperations.GetBindingExpression((FrameworkElement)yourComboBox, ((DependencyProperty)Button.SelectedItemProperty));
string Name = be.ParentBinding.Path.Path; 

さらに一歩進んで、その PropertyPath から DependencyProperty を見つけます。それを行う標準的な方法はありますか?最終的な目標は、これを Behavior で使用して既存のバインド (AssociatedObject.PropertyPath から smth へ) を削除し、2 つ (Behavior.Original から smth へ、AssociatedObject.PropertyPath から Behavior.Modified へ) を置き換えることです。

4

1 に答える 1

0

リフレクションを使用して名前で依存関係プロパティを取得できます。

public static class ReflectionHelper
{

    public static DependencyProperty GetDependencyProperty(this FrameworkElement fe, string propertyName)
    {
        var propertyNamesToCheck = new List<string> { propertyName, propertyName + "Property" };
        var type = fe.GetType();
        return (from propertyname in propertyNamesToCheck
                select type.GetPublicStaticField(propertyname)
                    into field
                    where field != null
                    select field.GetFieldValue<DependencyProperty>(fe))
            .FirstOrDefault();
    }

    public static FieldInfo GetPublicStaticField(this Type type, string fieldName)
    {
        return type.GetField(fieldName, BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.Static);
    }
}
于 2013-12-18T13:17:28.667 に答える