Person 개체의 PersonName의 6 개 구성 요소가 포함 된 프레젠테이션의 경우 중복 코드를 줄이고 데이터 바인딩을 용이하게하기 위해 확장명과 '미니보기 모델'(PersonNamePropertyTextBox)을 추가했습니다.반성없이이 작업을 수행 할 수 있습니까?
그래서 부모보기 모델의 생성자에서, 내가 좋아하는이 미니 뷰 모델 생성 :
public PimDetailVm(Person person, ..)
{
LastName = new PersonNamePropertyTextBox(
() => Model.GetPersonName().LastName, v => this.UpdatePersonNameProperty(pn => pn.LastName, v))
{
Label = PeopleResources.LastName_Label
};
FirstName = new PersonNamePropertyTextBox(
() => Model.GetPersonName().FirstName, v => this.UpdatePersonNameProperty(pn => pn.FirstName, v))
{
Label = PeopleResources.FirstName_Label
};
... etc.
}
public PersonNamePropertyTextBox LastName { get; private set; }
public PersonNamePropertyTextBox FirstName { get; private set; }
을 내가 것 정말 지금처럼 단지 현재 속성을 전달한다 할 수있을 것입니다 그래도 난이 작업을 수행하는 방법에 관한 고군분투
LastName = new PersonNamePropertyTextBox(vm=>LastName, PeopleResources.LastName_Label);
: 즉, "성"과 레이블 값 및하자 미니 뷰 모델은 적절한 게터/세터 대표, 뭔가를 설정합니다. 어떤 아이디어?
확장 바인딩을 관리하기 위해 바인더 클래스를 구현 시도해보십시오으로 PersonName
public class PersonNamePropertyTextBox : TextBoxActionData
{
public PersonNamePropertyTextBox(Func<string> getterFunc, Action<string> setterAction) {
if (getterFunc == null) throw new ArgumentNullException("getterFunc");
if (setterAction == null) throw new ArgumentNullException("setterAction");
GetterFunc = getterFunc;
SetterAction = setterAction;
}
}
왜 반사를 방지 하시겠습니까? – CodesInChaos
@CodeInChaos : 재미있는 질문이지만, 나는 교통 체증과 비슷한 반사를 피하려고합니다. 나는 교통량이 많은 곳에서 운전하는 것을 싫어하지만 때로는 당신이해야 할 일이 있습니다. ... –
@CodeInChaos, 모든 것이 평등합니다 - 즉, 문제를 똑같이 잘 해결할 수 있고 반사없이 해결할 수 있다면 - 사용하지 않는 해결책 반사가 더 안전하기 때문에 반사가 좋습니다. –