2009-09-09 3 views
1

저는 비즈니스 로직 시스템에 대한 몇 가지 맞춤 요구 사항을 처리하기 위해 특정 방식으로 속성을 구현하는 클래스를 보유하고 있습니다..NET에서 일종의 인터페이스를 통해 데이터 바인딩에 사용할 수있는 속성을 만드시겠습니까?

이 "특정 방법"은 데이터 바인딩 컨텍스트에서 속성을 비 작동 상태로 만듭니다. 기본적으로 클래스 클래스의 객체를 양식에 놓으면 데이터 바인딩에서 객체를 찾지 않으며 해당 객체의 속성 관리자는 속성을 나열하지만 편집 할 수는 없습니다.

내가 인터페이스 디자이너 또는 클래스에 구현할 수있는 속성이 바인딩 할 수있는 속성을보고 할 수있는 클래스에서 구현할 수있는 비슷한 경우 및 데이터 바인딩을 이야기하는 데 필요한 사용자 지정 코드를 구현하는 것입니다 궁금하네요. 시스템을 대신하여

속성 검사기에서 내 개체의 속성 값을 편집 할 필요가 없다는 점에 유의하십시오. 이는 속성이 얼마나 기능적이지 않은지의 예일뿐입니다. 데이터 바인딩 지원 만하면됩니다.

그런 인터페이스가 있습니까? 그렇다면 무엇입니까?

간단한 예를 들어 보겠습니다.

public class CustomDataBinding : Component 
{ 
    private Dictionary<String, Object> _Properties = new Dictionary<String, Object>(); 

    public CustomDataBinding() 
    { 
     _Properties["Property1"] = 10; 
     _Properties["Property2"] = "Test"; 
    } 
} 

가 내 개체를 할 수 있나요, 실제로 속성을 만드는 짧은 두 "속성"에 대한 데이터 바인딩 지원을 추가합니다 :

이의 내가이 클래스가 있다고 가정하자? 내 진짜 클래스, 내가 모든 속성의 유형을 알고, 그래서 쉽게 그것을 만드는 경우, 단지 문자열 값을 사용하는 위의 코드를 변경하는 것이

참고 : 나는 또한 검증 지원이 필요합니다

public class CustomDataBinding : Component 
{ 
    private Dictionary<String, String> _Properties = new Dictionary<String, String>(); 

    public CustomDataBinding() 
    { 
     _Properties["Property1"] = "Property1"; 
     _Properties["Property2"] = "Property2"; 
    } 
} 

을, 우리 클래스는 모든 속성에 대한 유효성 검사 상태를보고 할 수 있기 때문에 이미 IDataErrorInfo 및 IDataValidationInfo를 구현 했으므로 그 점을 알려줄 것입니다. 또한 INotifyPropertyChanged를 구현 했으므로 변경 메커니즘이 생각 났지만 특성을 발견하고 설명해야합니다. 이러한 인터페이스 외에도, 내가 조사해야 할 다른 정보는 환영할만한 정보입니다. ,

내가 말을해야

편집 -.

답변

5

재산 가방을 설명하는 것처럼 들립니다. 이것은 실제로 데이터 바인딩을 위해 지원되지만, ICustomTypeDescriptor 또는 TypeDescriptionProvider을 구현해야합니다. 사용 가능한 속성은 TypeDescriptor.GetProperties(obj) 또는 TypeDescriptor.GetProperties(type)을 통해 정의되거나 목록의 경우 ITypedList을 통해 정의됩니다.인스턴스마다 속성이 변경되는 경우 ICustomTypeDescriptor이 적합합니다. TypeDescriptionProvider은 유형별 맞춤 설정을 할 수 있으며 추가 작업없이 BindingList<T>과 같은 작업을 할 수 있습니다.

까다로운 것은 각 속성의 유형을 정의해야한다는 것입니다. 단지 object 인 경우 간단하지 않습니다. Here is a very simplified example, 모든 속성을 문자열로 처리합니다. 이 예에서는 목록을 바인딩하기 때문에 ITypedList을 사용하지만 ICustomTypeDescriptor을 구현하지 않습니다. PropertyGrid를 들어, 간단한 단축키를 사용하는 것입니다

주의점 TypeConverter - see example - 이것은 당신이 ICustomTypeDescriptor 또는 TypeDescriptionProvider를 사용하지없이 속성 을 조정할 수 있습니다.

+0

목록에 대해이 작업을 수행했는데 동일한 접근 방식이 여기에 유효하지 않은지 몰랐고 여기에 답변을 기다리는 동안 ICustomTypeDescriptor를 실험하고있었습니다.하지만이 질문에 대한 답변을 다른 질문에서 받아 들일 것입니다. 다른 질문을하십시오. –

+0

앞으로 그것을 기대 ;-p –

+0

여기있다 : http://stackoverflow.com/questions/1398109/multiple-bindingsource-components-necessary-for-just-one-data-source, 근본적으로 내 결함/불완전한 ICustomTypeDescriptor 구현. –

1

당신은 항상 인덱스로해야하고 IListSource 또는 IEnumerable을 구현하는 것입니다 불구하고 (직접의 속성 및 액세스 요소로

을 사전에 노출 될 수 비록 당신이 효과적으로 당신의 타입이없는 언어를 만들고 있습니다.이 이유에 관심이 있다면 아마 더 나은 방법이있을 것입니다 ...

1

새로운 속성을 게시 할 수 없기 때문에, ObservableDictionary로 사전을 게시하는 방법은 어떻습니까 < 문자열, 개체 > . this DrWPF article을 참조하십시오.

그러면 key을 사용하여 사전에 바인딩하여 나중에 지정한 속성을 가져올 수 있습니다.

+0

조사 할 가치가 있지만 지금은 마크의 대답이 가장 유망 해 보입니다. –

관련 문제