2

I got a collection of custom DependencyObjects that I created. But I think that it doesn't matter wherever the DependencyObject comes from. The thing is that I'd like the list its properties but when I'm looking at the C#doc for DependencyObject I can't find anything related to the properties... :/

How can I do it ?

(nb : I got fields (string, int, etcetc..) as properties in my DependencyObject, and I got DependencyProperties too. Ultimatly I'd like to list only the DependencyProperties but it's not an obligation !)

Thx in advance and sry for my langage, im french -_- (and sry for my president too...)

Guillaume Slashy
  • 3,554
  • 8
  • 43
  • 68

1 Answers1

3

You can do this using reflection, since DependencyProperties are (usually?) stored in public static fields of type DependencyProperty:

private static IEnumerable<DependencyProperty> GetDependencyProperties(DependencyObject o)
{
    return from field in o.GetType().GetFields(BindingFlags.Public | 
                                               BindingFlags.FlattenHierarchy | 
                                               BindingFlags.Static)
           where field.FieldType == typeof(DependencyProperty)
           select (DependencyProperty)field.GetValue(null);
}

It uses FlattenHierarchy to return all DependencyProperties, including those defined in parent classes. If you want only DependencyProperties defined directly in os class, remove the FlattenHierarchy flag.

Heinzi
  • 167,459
  • 57
  • 363
  • 519