Я предполагал, что ваша форма станет видимой до того, как будет назначено свойство Configuration. Вы не предоставили достаточно кода, чтобы увидеть, так ли это. Чтобы проверить мою озабоченность, я создал два объекта конфигурации:
public class Configuration1
{
public string Test { get; set; }
public byte Test1 { get; set; }
public int Test2 { get; set; }
}
и
public class Configuration2
{
public char Test3 { get; set; }
public List<string> Test4 { get; set; }
}
Я изменил класс вашей камеры, чтобы он выглядел так:
public class Camera
{
public Camera()
{
Configuration1 = new Configuration1();
Configuration2 = new Configuration2();
}
private object configuration;
[TypeConverter(typeof(ExpandableObjectConverter))]
public object Configuration { get; set; }
[TypeConverter(typeof(ExpandableObjectConverter))]
public Configuration1 Configuration1 { get; set; }
[TypeConverter(typeof(ExpandableObjectConverter))]
public Configuration2 Configuration2 { get; set; }
}
Затем я создал форму с PropertyGrid и двумя экземплярами Button. Я настроил формы взаимодействия следующим образом:
public partial class Form1 : Form
{
private readonly Camera camera = new Camera();
public Form1()
{
InitializeComponent();
propertyGrid1.SelectedObject = camera;
}
private void Button1Click(object sender, System.EventArgs e)
{
camera.Configuration = new Configuration2();
UpdatePropertyGrid();
}
private void Button2Click(object sender, System.EventArgs e)
{
camera.Configuration = new Configuration1();
UpdatePropertyGrid();
}
private void UpdatePropertyGrid()
{
propertyGrid1.Refresh();
propertyGrid1.ExpandAllGridItems();
}
}
Вид запуска выглядит так:
После нажатия первой кнопки:
После нажатия второй кнопки:
Если вы удалите обновление, сетка свойств будет работать неправильно. Альтернативой является предоставление интерфейса с INotifyPropertyChanged для ваших классов и свойств.