2009-12-04 1 views
1

문제의 배경은입니다.디자인 타임 중에 특성 창에서 특정 유형을 채우기위한 특수화 된 텍스트 상자가 있습니까?

. NET 응용 프로그램 개발을위한 자체 ORM 프레임 워크가 있습니다. 이제 ORM과 긴밀하게 작업 할 수있는 특수 UI 객체를 만들려고합니다. 모든 UI 컨트롤에서 구현되는 IBindable이라는 인터페이스를 만들었습니다. 우리는 asp.net의 textbox webcontrol으로 시작했습니다. 먼저 IBindable 인터페이스를 구현하는 System.Web.UI.WebControls.TextBox에서 파생 된 TextBox 클래스를 만들었습니다.

IBindable은 ORM의 키 바인딩 정보를 보유해야합니다.

  1. EntityType
  2. EntityFields

EntityType는 ORM 내의 buiness 오브젝트의 유형과 EntityField는에 결합되는하기 EntityType 비즈니스 객체의 특정 속성 인 실행 시간.

지금 실제 문제

, 설계 시간 동안

, 우리는 텍스트 상자의 PROPERT 창에서 텍스트 상자 속성 EntityType의 프로젝트에 사용할 수있는 모든 비즈니스 오브젝트를 채울 바랍니다. 사용자가 주어진 엔티티 유형을 선택하면 해당 EntityField 속성에 대해 선택된 EntityType의 속성을 채워야합니다.

는 우리의 모든 사업 개체 또는 엔티티 객체가 EntityBase 추상 클래스에서 파생 있습니다.

+0

: http://msdn.microsoft.com/en -us/library/system.componentmodel.iextenderprovider.aspx – Heinzi

+0

IExtenderProvider 공급자는 주로 Windows 양식에서 작동합니다. asp.net을 지원합니까? –

+0

비록 디자이너의 지원이 다소 불충분하지만 그렇습니다. 우리는 비슷한 (데이터 바인딩을 위해 .net 1.0의 구시대에서) 비슷한 작업을 수행했고 디자이너가 아닌 코드로 속성을 설정했습니다. – Heinzi

답변

1

기본적으로 편집기을 속성에 첨부하려고합니다. 사용자 정의 텍스트 상자에, 당신은 EditorAttribute 사용하여 속성에 편집기를 지정할 수 있습니다 : 물론

[Editor(typeof(EntityTypeChooser), typeof(System.Drawing.Design.UITypeEditor))] 
public property EntityType { ... } 

을, 당신이 구현해야 할 것이다 EntityTypeChooser : 당신은 UITypeEditor에서 상속과 EditValue 메소드를 오버라이드 (override).

예 :

당신은 정말 "익스텐더 Provider"를 사용하는 대신에 모든 UI 요소를 서브 클래 싱 고려해야한다
+0

는 유망 해 보인다. –

관련 문제