The main purpose of the IOPMPropertyExpander and IOPMPropertyExpander2 interfaces is to allow a property's data to be expanded into two or more sub-properties. IOPMPropertyExpander is a legacy interface that works only with static properties. IOPMPropertyExpander2 works with both static and dynamic properties.
When properties are expanded, the Property Inspector displays separate editing controls for each sub-property. For example, an AcDbLine entity has a single start point composed of X, Y, and Z coordinates. Though the point is a single property, the line's COM wrapper implements IOPMPropertyExpander to facilitate editing. The Property Inspector consults the IOPMPropertyExpander implementation and thus represents the three coordinates separately as Start X, Start Y, and Start Z. Each coordinate is provided with its own edit box.
In addition to splitting one property into an array of properties, you can also group the elements in that array. For example, the lightweight polyline Automation object stores vertices in one property, Coordinates, which returns a one-dimensional array of doubles. Each successive pair in the array represents the next X,Y vertex of the 2D polyline. Because an appropriate grouping for polyline vertices is implemented, the Property Inspector creates a spinner control for the Coordinates property. The spinner allows the user to view and edit one vertex at a time.
Property expansion is optional. In most cases, you can bypass it by creating separate properties in the object's IDL description.