Here is the code that should be used for custom sub-properties
private void OnCreateItem(object sender, CreatePropertyGridItemEventArgs e)
{
e.Item = new MyPropertyGridItem((PropertyGridTableElement)sender, e.Parent);
}
As visual studio would be happy of you only provide a constructor with one argument when you inherit from PropertyGridItem you have no way of knowing that you need a second one where the parent should be the second argument.
The proper way to handle this would be to set the parent internally.