일부 사용자 지정 CLR 개체를 편집 할 수 있도록 데이터 바인딩을 사용하는 매우 간단한 WPF 응용 프로그램이 있습니다. 이제 사용자가 저장을 클릭 할 때 입력 유효성 검사를 입력하고 싶습니다. 그러나 내가 읽은 모든 WPF 책은 실제로이 문제에 어떤 공간도 할애하지 않습니다. 사용자 지정 ValidationRules를 만들 수 있다는 것을 알지만 이것이 내 요구에 과잉 일지 궁금합니다.
그래서 내 질문은 이것이다 : WPF에서 사용자 입력의 유효성을 검사하는 모범 사례를 보여주는 좋은 샘플 응용 프로그램이나 기사가 어딘가에 있습니까?
답변
답변
MS의 Patterns & Practices 문서에서 :
데이터 검증 및 오류보고
뷰 모델 또는 모델은 종종 데이터 유효성 검사를 수행하고 데이터 유효성 검사 오류를보기에 신호하여 사용자가이를 수정할 수 있도록해야합니다.
Silverlight 및 WPF는 뷰의 컨트롤에 바인딩 된 개별 속성을 변경할 때 발생하는 데이터 유효성 검사 오류 관리를 지원합니다. 컨트롤에 데이터 바인딩 된 단일 속성의 경우 뷰 모델 또는 모델은 들어오는 잘못된 값을 거부하고 예외를 throw하여 속성 설정자 내에서 데이터 유효성 검사 오류를 알릴 수 있습니다. 데이터 바인딩의 ValidatesOnExceptions 속성이 true이면 WPF 및 Silverlight의 데이터 바인딩 엔진이 예외를 처리하고 데이터 유효성 검사 오류가 있다는 시각적 신호를 사용자에게 표시합니다.
그러나 이러한 방식으로 속성을 사용하여 예외를 throw하는 것은 가능하면 피해야합니다. 다른 방법은 뷰 모델 또는 모델 클래스에서 IDataErrorInfo 또는 INotifyDataErrorInfo 인터페이스를 구현하는 것입니다. 이러한 인터페이스를 통해 뷰 모델 또는 모델은 하나 이상의 속성 값에 대한 데이터 유효성 검사를 수행하고 사용자에게 오류를 알릴 수 있도록 오류 메시지를 뷰에 반환 할 수 있습니다.
문서는 IDataErrorInfo 및 INotifyDataErrorInfo를 구현하는 방법을 설명합니다.
답변
personaly, 유효성 검사를 처리하기 위해 예외를 사용하고 있습니다. 다음 단계가 필요합니다.
- 데이터 바인딩 식에 “ValidatesOnException = True”를 추가해야합니다.
- 바인딩하는 데이터 개체에서 새 값이 조건을 충족하는지 확인하는 DependencyPropertyChanged 처리기를 추가해야합니다. 그렇지 않은 경우 개체 이전 값으로 복원하고 (필요한 경우) 예외를 throw합니다.
- 컨트롤에 잘못된 값을 표시하는 데 사용하는 컨트롤 템플릿에서 오류 수집에 액세스하고 예외 메시지를 표시 할 수 있습니다.
여기서 트릭은 DependencyObject에서 파생 된 개체에만 바인딩하는 것입니다. INotifyPropertyChanged의 간단한 구현은 작동하지 않습니다. 프레임 워크에 버그가있어 오류 수집에 액세스 할 수 없습니다.
답변
또한 이 기사를 확인 하십시오 . Microsoft 는 유효성 검사 주제를 다루는 패턴과 관행에서 엔터프라이즈 라이브러리 (v4.0) 를 출시 했지만 WPF에 대한 유효성 검사를 포함하지 않은 이유를 신이 알고 있으므로 제가 지시하는 블로그 게시물에서 작성자에 대해 설명합니다. 그것을 조정했습니다. 도움이 되었기를 바랍니다!
답변
WPF WAF (Application Framework) 의 BookLibrary 샘플 애플리케이션에 관심이있을 수 있습니다 . WPF에서 유효성 검사를 사용하는 방법과 유효성 검사 오류가있을 때 저장 단추를 제어하는 방법을 보여줍니다.
답변
비즈니스 클래스가 UI에서 직접 사용되는 경우 IDataErrorInfo를 사용하는 것이 더 좋습니다. 로직을 소유자에게 더 가깝게 배치하기 때문입니다.
비즈니스 클래스가 WCF / XmlWeb 서비스에 대한 참조로 생성 된 스텁 클래스 인 경우 ExceptionValidationRule과 함께 사용하기 위해 IDataErrorInfo를 사용하거나 예외를 throw 할 수 없습니다. 대신 다음을 수행 할 수 있습니다.
- 사용자 지정 ValidationRule을 사용합니다.
- WPF UI 프로젝트에서 부분 클래스를 정의하고 IDataErrorInfo를 구현합니다.