2014-05-25 1 views
0

저는 주변을 검색 중이므로 IDataErrorInfo이 현재 입력 유효성 검사에 선호되는 방법 인 것으로 보입니다.값 변환 후의 WPF IDataErrorInfo 유효성 검사

IDataErrorInfo과 값 변환기를 결합하면 나에게 조금 까다로운 것으로 입증되었습니다.

하나의 질문 나는 스스로를 물었고, 결국 Google에서는 값 변환기에서 잘못된 입력을 처리하는 방법을 알고있었습니다. 일반적인 방법은 입력이 잘못되었을 때 변환되지 않은 값을 반환하는 것입니다. 뷰 모델/모델은 잘못된 입력을 확인하고 무엇이 잘못되었는지 상세하게 설명 할 수 있기 때문에 많은 의미가 있습니다.

그러나이 방법에는 한 가지 문제가 있습니다. 의 다음과 같은 시나리오를 해보자 :

  1. 나는 사용자가 가격에 입력하도록되어 유형 decimal의 속성에 바인딩 텍스트 상자가 있습니다.

  2. 소수점을 특정 소수점 구분 기호로 변환하고 두 소수로 반올림하는 값 변환기가 있습니다.

  3. 사용자는 aa12.4을 텍스트 상자에 입력합니다.

내 값 변환기를 반환하면 aa12.4이 텍스트 상자가 바인딩 가격 속성에 연결되어있는 경우 자동으로 0으로 변환됩니다 (이 변환 된 잘못된 값 아니기 때문에). 0 (또는 0.00)은 사실로 유효성을 확인하는 완전한 법적 가격입니다.

당신은 내가 aa12.4이 유효하고 마술 I 입력에 특별히 문제가 있는지 확인하고 사용자에게 그 뒷면을보고 느슨한 또한 0으로 모든 수단을 변형되고 싶지 않아 이해할 수있다.

이 시나리오를 어떻게 처리합니까? 유효성 검사를 처리하는 메서드는 속성이 설정된 후에 호출됩니다. 내가 읽은 한 가지 아이디어는 변환기에서 DependencyProperty.UnsetValue을 반환하는 것입니다. 다른 한편으로는 유효성 검사기가 입력에 무엇이 잘못되었는지를 판단하는 데 도움이되지 않습니다. 단지 변환 할 수 없다는 것입니다.

답변

0

IDataErrorInfo를 사용하는 대신 값을 검사하여 ViewModel로 전송하기 전에 ValidationRules를 사용할 수 있습니다. 또는 조쉬 스미스 (Josh Smith)와 다른 사람들이 제안한보다 근본적인 접근 방식을 따르고 ViewModel의 문자열 속성에 숫자/기타 형식의 모든 속성을 래핑하면 ViewModel에서 항상 변환되지 않은/변환 할 수없는 값을 알 수 있습니다.

그런데 지역화 된 숫자 형식을 사용하려면 변환기가 필요하지 않습니다. 대신 변환기에서 ConverterCulture를 설정할 수 있습니다.