Нет простой в использовании встроенной поддержки в PropertyGrid
для динамического изменения того, какие свойства видны в зависимости от значения другого свойства. Это не значит, что это невозможно, просто нужно немного поработать.
Как вы уже обнаружили, то, что контролирует, является ли свойство видимым или нет, это BrowsableAttribute
. Таким образом, в основном вам нужно динамически изменить этот атрибут, и способ сделать это - создать собственные TypeProvider
и TypeDescriptor
для вашего класса, который динамически возвращает атрибут Browsable(false)
или Browsable(true)
для свойства, которое будет скрыто / отображается в зависимости от значения другого свойства в классе. Я не буду пытаться описать, как TypeProvider
и TypeDescriptor
работают здесь, так как это довольно длительный предмет, и в Интернете уже имеется много информации по этому вопросу.
Кроме того, необходимо указать атрибут [RefreshProperties(RefreshProperties.All)]
в свойстве, определяющий, должно ли быть видимым другое свойство или нет. Это заставит сетку свойств запрашивать TypeDescriptor
для списка свойств при каждом изменении его значения, давая вашему TypeDescriptor
возможность вернуть другой набор свойств или другие атрибуты возвращаемых им свойств.
Надеюсь, это, по крайней мере, укажет вам правильное направление. К сожалению, для склеивания этих вещей требуется немало усилий.