내 생각에 구성 속성이 할당되기 전에 양식이 표시됩니다. 그럴 수 있는지 충분한 코드를 제공하지 않았습니다. 나는 다음을 생성
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; }
}
:이처럼 보는 카메라 클래스를 수정
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; }
}
: 내 우려를 테스트하기 위해, 나는 두 가지 구성 객체를 생성 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를 사용하여 인터페이스를 제공하는 것입니다.
당신은 두 가지 질문을 올렸지 만, 상향 투표하지 않았거나 하나의 대답을 인정했습니다. 사람들에게 자신의 업무에 대해 인정하고 더 많은 도움을 얻을 수 있습니다. –