2010-01-26 3 views
2

미리 정의 된 필드 정의의 동적 목록에서 데이터 입력보기를 만드는 방법을 조사하고 있습니다. "미리 정의 된"이란 8 개의 기본 필드 유형 만 있다는 의미입니다. Silverlight Toolkit의 DataForm 컨트롤은 거의 원하는 기능이지만 객체 속성 인 (사용자 정의 정의 목록이 아님)을 대상으로합니다.Silverlight의 동적 데이터 입력 양식

쉽게 만들 수있는 기존 프로젝트가 있습니까? 내 디자인 아이디어에 대한 의견을 말하십시오 (아래). 실버 라이트 경험이 2 ~ 3 주 밖에 없습니다.

기본 디자인 아이디어 : 나는 사용자 정의 데이터 필드 타입을 정의 생각하고

. IEnumerable<BaseDataField>은 UI에 의해 수신되고 열거되며 각 필드의 유형에 따라 컨트롤이 만들어집니다. 이 필드를 만들기 위해 연장됩니다

public abstract class BaseDataField { 
    public string FieldCode { get; private set; } 
    public string FieldDescription { get { return FieldDefinitions.Instance.FieldDescription(FieldCode); } } 
    ... 
} 

public class StringDataField : BaseDataField 
public class BooleanDataField : BaseDataField 
public class CurrencyDataField : BaseDataField 
public class IntegerDataField : BaseDataField 
public class NumericDataField : BaseDataField 
public class DateTimeDataField : BaseDataField 
public class LookupDataField : BaseDataField 
public class SpecialDataField : BaseDataField 

: 각 필드는 설명과 함께 레이블을 만들 것입니다 BooleanDataField이 체크 박스를 생성합니다, LookupDataField는 명확히 등의 아이디어를

의사 코드를 콤보 상자를 생성합니다 결합 가능; 각 유형에 대해 사용자 정의 컨트롤을 지정할 수 있습니다. 유효성 확인 피드백이 있습니다.

Silverlight에서 쉽게 만들 수 있습니까? 아니면 사용자 지정 컨트롤을 만들어야합니까?

참고 :이 프로그램은 기존의 다중 계층 LOB 플랫폼 용 웹 UI입니다. 모든 데이터는 JSON 기반 REST 서비스에서 직렬화됩니다.

감사합니다.

+0

Silverlight 환경은 2 주 밖에 없지만 .NET 경험은 얼마나됩니까? 그것은 잘 번역하는 경향이 있습니다. 나는'abstract public Type FieldType {get; }'를'BaseDataField'로 설정하는 것이 유용 할 것입니다. –

+0

2 ~ 3 년 동안 .NET 2.0을 사용하고 MCPD를 사용하고 있습니다. XAML, Silverlight 컨트롤 및 바인딩 모델은 매우 새로운 기능입니다.제안 해 주셔서 감사합니다. – carlmon

답변

0

우리는 DataForm으로 시작했지만, 유용하게 만들고 여전히 문제가있는 모든 것을 오버라이드했습니다. 시도에서 많은 것을 배웠고 결국 작업에 대한 사용자 지정 컨트롤을 만들었습니다. 불행하게도이 솔루션은 확장 성이 뛰어납니다 ...

2

DataForm 클래스를 솔루션에 통합하는 것이 좋습니다. 사용자 지정 컨트롤을 실제로 처리 할 수 ​​있습니다. 필자는 이상적인 최소 xaml 데이터 형식의 목표를 수년간 쫓아 왔으며 DataForm의 기본 제공 기능과 DataField에서 파생 된 사용자 정의 필드의 훌륭한 조합이라고 생각하는 것에 마침내 정착했습니다. 예를 들어 Content 속성이 지정되지 않은 경우 XAML 큰 시간을 최소화하는 TextBox를 자동으로 사용하도록 DataField를 확장했습니다. 또한 DataForm이 기본적으로 지원하지 않는 DisplayFormatAttribute에 대한 지원을 추가했습니다.

어쨌든 먼저 할 수있는 일은 위에서 설명한 것과 같이 DataField에서 파생 된 여러 하위 클래스를 만드는 것입니다. 그런 다음 OnApplyTemplate 메서드에서 데이터를 나타내는 요소를 만듭니다. 예 :

class BooleanDataField : DataField { 

    protected override void OnApplyTemplate() { 

     if (this.Content == null) { 
      var check = new CheckBox(); 
      check.SetBinding(CheckBox.IsCheckedProperty, 
       new Binding(this.PropertyPath)); 
      this.Content = check; 
     } 

     base.OnApplyTemplate(); 
    } 

} 

DataForm에서로드 한 필드 메타 데이터를 얻는 방법에 대한 몇 가지 옵션이 있습니다. AutoGeneratingField 이벤트를 처리하고 즉시 사용할 적절한 필드를 찾거나 자동 필드 생성을 비활성화하고 직접 필드를로드 할 수 있습니다.

+0

동적 생성 필드 목록에 자동 생성 기능을 사용할 수 있습니까? Google은 사용자가 맞춤 필드를 만들어 제품에 연결할 수있는 도구를 제공합니다. DataForm.GenerateFields()는 복합 유형 속성에서만 필드를 생성하는 것으로 보입니다. 귀하의 추천에 감사드립니다. 바인딩을 사용하여 수동 DataForm 채우기를 조사하고 작동하는 경우 대답을 승인 된 것으로 표시합니다. – carlmon

+0

이 옵션은 매우 흥미로 웠습니다. 나는 이것이 모두 어떻게 어울릴 지보고 싶어합니다. –