[.net] WPF 데이터 바인딩 및 유효성 검사 규칙 모범 사례

일부 사용자 지정 CLR 개체를 편집 할 수 있도록 데이터 바인딩을 사용하는 매우 간단한 WPF 응용 프로그램이 있습니다. 이제 사용자가 저장을 클릭 할 때 입력 유효성 검사를 입력하고 싶습니다. 그러나 내가 읽은 모든 WPF 책은 실제로이 문제에 어떤 공간도 할애하지 않습니다. 사용자 지정 ValidationRules를 만들 수 있다는 것을 알지만 이것이 내 요구에 과잉 일지 궁금합니다.

그래서 내 질문은 이것이다 : WPF에서 사용자 입력의 유효성을 검사하는 모범 사례를 보여주는 좋은 샘플 응용 프로그램이나 기사가 어딘가에 있습니까?



답변

새로운 선호하는 방법은 IDataErrorInfo를 사용하는 것입니다.

여기에서 더 많은 것을 읽으 십시오


답변

MS의 Patterns & Practices 문서에서 :

데이터 검증 및 오류보고

뷰 모델 또는 모델은 종종 데이터 유효성 검사를 수행하고 데이터 유효성 검사 오류를보기에 신호하여 사용자가이를 수정할 수 있도록해야합니다.

Silverlight 및 WPF는 뷰의 컨트롤에 바인딩 된 개별 속성을 변경할 때 발생하는 데이터 유효성 검사 오류 관리를 지원합니다. 컨트롤에 데이터 바인딩 된 단일 속성의 경우 뷰 모델 또는 모델은 들어오는 잘못된 값을 거부하고 예외를 throw하여 속성 설정자 내에서 데이터 유효성 검사 오류를 알릴 수 있습니다. 데이터 바인딩의 ValidatesOnExceptions 속성이 true이면 WPF 및 Silverlight의 데이터 바인딩 엔진이 예외를 처리하고 데이터 유효성 검사 오류가 있다는 시각적 신호를 사용자에게 표시합니다.

그러나 이러한 방식으로 속성을 사용하여 예외를 throw하는 것은 가능하면 피해야합니다. 다른 방법은 뷰 모델 또는 모델 클래스에서 IDataErrorInfo 또는 INotifyDataErrorInfo 인터페이스를 구현하는 것입니다. 이러한 인터페이스를 통해 뷰 모델 또는 모델은 하나 이상의 속성 값에 대한 데이터 유효성 검사를 수행하고 사용자에게 오류를 알릴 수 있도록 오류 메시지를 뷰에 반환 할 수 있습니다.

문서는 IDataErrorInfo 및 INotifyDataErrorInfo를 구현하는 방법을 설명합니다.


답변

personaly, 유효성 검사를 처리하기 위해 예외를 사용하고 있습니다. 다음 단계가 필요합니다.

  1. 데이터 바인딩 식에 “ValidatesOnException = True”를 추가해야합니다.
  2. 바인딩하는 데이터 개체에서 새 값이 조건을 충족하는지 확인하는 DependencyPropertyChanged 처리기를 추가해야합니다. 그렇지 않은 경우 개체 이전 값으로 복원하고 (필요한 경우) 예외를 throw합니다.
  3. 컨트롤에 잘못된 값을 표시하는 데 사용하는 컨트롤 템플릿에서 오류 수집에 액세스하고 예외 메시지를 표시 할 수 있습니다.

여기서 트릭은 DependencyObject에서 파생 된 개체에만 바인딩하는 것입니다. INotifyPropertyChanged의 간단한 구현은 작동하지 않습니다. 프레임 워크에 버그가있어 오류 수집에 액세스 할 수 없습니다.


답변

또한 이 기사를 확인 하십시오 . Microsoft 는 유효성 검사 주제를 다루는 패턴과 관행에서 엔터프라이즈 라이브러리 (v4.0) 를 출시 했지만 WPF에 대한 유효성 검사를 포함하지 않은 이유를 신이 알고 있으므로 제가 지시하는 블로그 게시물에서 작성자에 대해 설명합니다. 그것을 조정했습니다. 도움이 되었기를 바랍니다!


답변

WPF WAF (Application Framework)BookLibrary 샘플 애플리케이션에 관심이있을 수 있습니다 . WPF에서 유효성 검사를 사용하는 방법과 유효성 검사 오류가있을 때 저장 단추를 제어하는 ​​방법을 보여줍니다.


답변

비즈니스 클래스가 UI에서 직접 사용되는 경우 IDataErrorInfo를 사용하는 것이 더 좋습니다. 로직을 소유자에게 더 가깝게 배치하기 때문입니다.

비즈니스 클래스가 WCF / XmlWeb 서비스에 대한 참조로 생성 된 스텁 클래스 인 경우 ExceptionValidationRule과 함께 사용하기 위해 IDataErrorInfo를 사용하거나 예외를 throw 할 수 없습니다. 대신 다음을 수행 할 수 있습니다.

  • 사용자 지정 ValidationRule을 사용합니다.
  • WPF UI 프로젝트에서 부분 클래스를 정의하고 IDataErrorInfo를 구현합니다.

답변