2012-10-28 3 views
4

Phone 개체가 해당 속성 중 하나 인 ViewModel 클래스가 있고 기본 창 데이터 컨텍스트가 ViewModel로 설정되어 있는데 기본 Phone Model 클래스 또는 ViewModel에 IDataErrorInfo를 구현해야합니까? 전화 속성을 포함하는 클래스?뷰 모델에서 IDataErrorInfo 구현

또한 내 ViewModel.NewPhone.StringProperty의 유효성을 검사하려고하는 텍스트 상자를 바인딩하는 올바른 방법은 무엇입니까?

많은 감사

답변

6

IDataErrorInfo을 구현하는 곳의 결정은 정말 응용 프로그램의 로직에 따라 달라집니다. 예를 들어 Phone 클래스에서 유효하지 않은 전화 번호를 허용하지 않는 방식으로 구현할 수 있지만, 뷰 모델에서는 미국 전화 번호 만 허용하려고합니다.

일반적으로 좋은 연습은 model과 viewmodel 모두에 IDataErrorInfo을 구현하는 것이며, viewmodel에서 오류가 발견되지 않은 경우 요청을 모델로 전달하십시오. 그런 다음 평상시처럼 뷰 모델에 바인딩합니다.

public string this[string propertyName] 
{ 
    get 
    { 
     if (propertyName == "PhoneNumber") 
     { 
      if (!IsUSNumber(PhoneNumber)) 
      { 
       return "Non-US number."; 
      } 
     } 

     // No validation errors found by the viewmodel 
     // Forward to model's IDataErrorInfo implementation 
     return Model[propertyName]; 
    } 
} 

내가 모델이 전화 번호 형식처럼, 모든 전화를위한 관련된 기본적인 검증을 구현하고, 뷰 모델은에만 허용으로 볼보기에 따라 다를 수있는 뷰 특정 검증을 구현해야하는 것이 좋 특정 공급자에게 속한 미국 전화 번호 또는 번호.

+1

좋은 설명, 특히 이해하기 쉽고 구체적인 사용 예를 사용하십시오. 감사. –

관련 문제