2011-04-08 7 views
0

안녕하세요, 내 매퍼로 엔티티 프레임 워크를 사용하고 있는데, 나는 dropDownList가 있고 코드 내에서 DataTextField의 코드를 설정하고 싶습니다. 그러나 클래스의 일부 속성에 정적으로 "someProperty "내 모델에서 필드가 변경되면이 장소에서 예외가 발생합니다. 속성 이름이 바뀌면 바인딩이 변경된 속성을 가리키며 어떻게 할 수 있습니까? , 내가 엔티티 모델에서 제기 변경할 때 그래서 이것은 정적 문자열이 아닌,하지만 난 여전히 행복하지 왜냐하면 오전속성에 대한 동적 바인딩

GetPropertyName((SampleClass) => r.SampleProperty) 

: 다음

public static string GetPropertyName<T, TReturn>(Expression<Func<T, TReturn>> expression) 
    { 
     MemberExpression body = (MemberExpression)expression.Body; 
     return body.Member.Name; 
    } 

과 :

은 내가 더 나은 해결책을 발견 여기에 나는 오류가있다. 모델의 변화에 ​​따라 이러한 바인딩이 변할 것인가?

+0

아니요, 불가능합니다. 모델이 변경되면 새로운 속성 이름 등을 사용하도록 코드를 업데이트해야합니다. btw 솔루션은 실제로 하드 코딩 된 문자열을 가질 필요가 없도록합니다. :) –

답변

0

우리는 다음과 같이 데이터 바인딩 전에 익명의 개체에 대한 비즈니스 오브젝트를 매핑됩니다

var objectsToBindToDropdown = businessObjects.Select(o => new 
    { 
     SomeProperty1 = o.BusinessProperty1, 
     SomeProperty2 = o.BusinessProperty2 
    }); 

dropDownList.DataTextField = "SomeProperty1"; 
// TODO: bind the drop down list 

모델의 변경이있는 경우, 예를 들어, BusinessProperty1이 AnotherBusinessProperty1로 이름이 바뀌면 컴파일 오류가 발생하며 이것이 정확히 목표입니다.

관련 문제