Получить DependencyProperties, используя отражение (Type.GetProperties)? - PullRequest
4 голосов
/ 28 сентября 2011

Я получил пользовательский тип, который представляет собой пару полей, и я хотел бы получить только свойства зависимости.

Вот код, который возвращает все свойства:

propertyInfos = myType.GetProperties();

foreach (PropertyInfo propertyInfo in propertyInfos)
{
    Console.WriteLine(propertyInfo.Name);
}

Я знаю, что должен добавить что-то в параметр для GetProperties, что-то с BindingFlags.XXX, но я проверяю все, что возможно, как XX, и не нашел что-то, что звучит хорошо для меня ...

1 Ответ

5 голосов
/ 28 сентября 2011

Свойства зависимости являются статическими полями типа DependencyProperty

static IEnumerable<FieldInfo> GetDependencyProperties(Type type)
{
    var dependencyProperties = type.GetFields(BindingFlags.Static | BindingFlags.Public)
                                   .Where(p => p.FieldType.Equals(typeof(DependencyProperty)));
    return dependencyProperties;
}

Если вы хотите получить свойства зависимостей родителей этого элемента управления, то вы можете использовать следующий метод:

static IEnumerable<FieldInfo> GetDependencyProperties(Type type)
{
    var properties = type.GetFields(BindingFlags.Static | BindingFlags.Public)
                         .Where(f=>f.FieldType == typeof(DependencyProperty));
    if (type.BaseType != null)
        properties = properties.Union(GetDependencyProperties(type.BaseType));
    return properties;
}
...