it-swarm-ko.tech

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

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

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

100
Mark Heath

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

더 읽기 여기

83
rudigrobler

MS의 Patterns & Practices documentation :

데이터 검증 및 오류보고

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

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

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

이 문서에서는 IDataErrorInfo 및 INotifyDataErrorInfo를 구현하는 방법에 대해 설명합니다.

23
Pat

개인적으로, 나는 유효성 검사를 처리하기 위해 예외를 사용하고 있습니다. 다음 단계가 필요합니다.

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

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

10
Greg

이 기사 도 확인하십시오. 아마도 Microsoft는 검증 주제를 다루는 패턴과 실습에서 Enterprise Library (v4.0) 를 발표했지만 WPF에 대한 검증이 포함되지 않은 이유를 알고 있으므로 블로그 게시물을 지시합니다. 당신은 저자가 그것을 적응시키기 위해 무엇을했는지 설명합니다. 이것이 도움이되기를 바랍니다!

3
murki

WAF Application Framework (WAF) BookLibrary 샘플 응용 프로그램에 관심이있을 수 있습니다. WPF에서 유효성 검사를 사용하는 방법과 유효성 검사 오류가있을 때 저장 버튼을 제어하는 ​​방법을 보여줍니다.

2
jbe

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

비즈니스 클래스가 WCF/XmlWeb 서비스에 대한 참조로 작성된 스텁 클래스 인 경우 IDataErrorInfo를 사용하거나 ExceptionValidationRule과 함께 사용할 예외를 발생시킬 수 없습니다. 대신 당신은 할 수 있습니다 :

  • 사용자 정의 ValidationRule을 사용하십시오.
  • WPF UI 프로젝트에서 부분 클래스를 정의하고 IDataErrorInfo를 구현하십시오.
0
Alex Pollan