FYI I ended up punting on this, I could not find an approach that worked well for me. I tried a couple flavors of a custom factory supplying my own PropertyDescriptorDataAccessor. In one case I initialized the PropertyDescriptorDataAccessor with data that connects the expandable object with the target property, and in another I kept the PropertyDescriptorDataAccessor associated with the expandable object but provided and override for GetValue where it piped it through the the target property.
It came down to the way the propgrid control calls the GetProperties method. It works fine for the top-level properties, I can provide what I need. But when I get called to supply child properties for each of the properties I supplied at the top level I don't have the context to know if I'm dealing with one of my expandable properties or not. The arguments provided just give the 'value' and in the case of one of my expandable properties it's the target value with is usually a simple type (bool, int). I don't have the type info to know if that's one of my special cases where the property is actually the 'mapped' instance and should thus provide the list of children.
I did try some hairy schemes of keeping index data around, etc. but that was fragile (looks like GetProperties is designed for re-entrancy?) and there are also cases where GetProperties is called when mousing with the propgrid and GetProperties is expected to return the right info given an arbitrary target value param.
I also tried an approach of supplying my own DataTemplate for the my expandable nodes and doing the binding to the target property in xaml. This worked ok in some simple cases but I was not really prepared to duplicate all the templates of the built-in editors we need to get there (are your templates for the build-in's even available w/o source license?).
I also considered using my own datatypes for all my target properties that are representing an expandable category (so I could detect my 'expandable' case based on data type) but many are sealed and I didn't what to spend days to create some kind of encapsulation classes.
Am I missing something here? I tried my hand at a type converter but no luck there either (but I did not put in a whole lot of effort in that direction).
Is there some other way to provide a binding expression for an exapandable property? (xaml, code, or otherwise)
I ended up just using indents in the property display names to approximate the desired look (but I don't get expandability this way).