The PropertyGridControl supports the standard ICustomTypeDescriptor interface. To be able to display dynamic properties, you can implement this interface in the data source class and pass the instance of this class to PropertyGridControl.SelectedObject.
In this example, this interface is implemented in the DictionaryWrapper<T> class. In the GetProperties methods, it returns a collection of custom PropertyDescriptor descendants.