2011-03-06 1 views
0

임의 객체의 속성 편집을 활성화해야합니다 (객체 유형은 런타임에만 알려짐). 내가 PropertyGrid가에 클래스 1의 속성을 볼 수있는 오브젝트 "카메라"를 선택한 후PropertyGrid에서 동적 객체 유형의 속성 표시

public class Camera 
{ 
    [TypeConverter(typeof(ExpandableObjectConverter))] 
    public object Configuration 
    { 
     get 
     { 
      return configuration; 
     } 
     set 
     { 
      configuration = value; 
     } 
    } 

    public Class1 a; 
    [TypeConverter(typeof(ExpandableObjectConverter))] 
    public Class1 A 
    { 
     get 
     { 
      return a; 
     } 
     set 
     { 
      a = value; 
     } 
    } 
} 

,하지만 난 개체의 속성을 "구성"을 볼 수 없습니다 : 나는 다음과 같은 클래스를 만들었습니다. 이 문제를 어떻게 해결할 수 있습니까?

+1

당신은 두 가지 질문을 올렸지 만, 상향 투표하지 않았거나 하나의 대답을 인정했습니다. 사람들에게 자신의 업무에 대해 인정하고 더 많은 도움을 얻을 수 있습니다. –

답변

1

내 생각에 구성 속성이 할당되기 전에 양식이 표시됩니다. 그럴 수 있는지 충분한 코드를 제공하지 않았습니다. 나는 다음을 생성

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 인스턴스로 폼을 만듭니다. 두 번째를 클릭하면

enter image description here

: 첫 번째 버튼을 클릭 한 후

enter image description here

:

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(); 
    } 
} 

시동보기는 다음과 같습니다 :이 같은 형태의 상호 작용을 구성 버튼 :

enter image description here

새로 고침을 제거하면 속성 표가 올바르게 작동하지 않습니다. 다른 방법은 클래스와 속성에 INotifyPropertyChanged를 사용하여 인터페이스를 제공하는 것입니다.

+0

정말 고마워. 나는이 문제를 해결한다! "새로 고침 기능"이 핵심 포인트입니다! – user610801