WPF 데이터 바인딩 및 검증 규칙의 베스트프랙티스
데이터 바인딩을 사용하여 일부 커스텀 CLR 개체를 편집할 수 있는 매우 단순한 WPF 응용 프로그램이 있습니다.사용자가 [Save]를 클릭했을 때 입력 검증을 하고 싶다고 생각하고 있습니다.하지만 내가 읽은 모든 WPF 책들은 이 문제에 대해 어떤 공간도 할애하지 않는다.커스텀 Validation Rules를 작성할 수 있는 것은 알고 있습니다만, 제 요구에 부응하지 못할까 생각하고 있습니다.
그래서 WPF에서의 사용자 입력을 검증하기 위한 베스트 프랙티스를 나타내는 좋은 샘플 어플리케이션이나 문서가 있습니까?
IDataErrorInfo를 사용하는 것이 새로운 바람직한 방법이라고 생각합니다.
자세한 내용은 이쪽
MS의 「패턴과 프랙티스」의 메뉴얼에서는, 다음과 같이 설명합니다.
데이터 검증 및 오류 보고
사용자가 데이터 검증을 수행하고 데이터 검증 오류를 수정하기 위해 뷰에 신호를 보내는 데 뷰 모델 또는 모델이 필요한 경우가 많습니다.
Silverlight 및 WPF는 보기에서 컨트롤에 바인딩된 개별 속성을 변경할 때 발생하는 데이터 유효성 검사 오류를 관리할 수 있도록 지원합니다.컨트롤에 데이터가 바인딩된 단일 속성의 경우 뷰 모델 또는 모델은 들어오는 불량 값을 거부하고 예외를 발생시킴으로써 속성 설정기 내의 데이터 유효성 검사 오류를 알릴 수 있습니다.데이터 바인딩의 Validate On Exceptions 속성이 true인 경우 WPF 및 Silverlight의 데이터 바인딩 엔진은 예외를 처리하고 사용자에게 데이터 검증 오류가 있음을 시각적으로 알려줍니다.
단, 가능한 한 이러한 방식으로 속성을 가진 예외를 던지는 것은 피해야 합니다.대체 접근법은 뷰 모델 또는 모델클래스에 IDataErrorInfo 또는 INotifyDataErrorInfo 인터페이스를 구현하는 것입니다.이러한 인터페이스를 통해 뷰 모델 또는 모델은 하나 이상의 속성 값에 대한 데이터 검증을 수행하고 뷰에 오류 메시지를 반환하여 사용자에게 오류를 알릴 수 있습니다.
또, IDataErrorInfo 와 INotifyDataErrorInfo 를 실장하는 방법에 대해서도 설명합니다.
개인적으로, 난 예외를 이용해서 검증을 처리하고 있어다음의 순서가 필요합니다.
- 데이터 바인딩 표현식에서 "ValidatesOnException"을 추가해야 합니다.=진짜"
- 바인드하고 있는 데이터 오브젝트에 DependencyPropertyChanged 핸들러를 추가해야 합니다.이 핸들러에서는 새로운 값이 조건을 충족하는지 여부를 확인할 수 없습니다.실행하지 않으면 오브젝트의 오래된 값(필요한 경우)으로 복원하여 예외를 발생시킵니다.
- 컨트롤에서 잘못된 값을 표시하는 데 사용하는 컨트롤 템플릿에서 오류 수집에 액세스하여 예외 메시지를 표시할 수 있습니다.
여기서 트릭은 DependencyObject에서 파생된 오브젝트에만 바인드하는 것입니다.INotify의 간단한 구현Property Changed가 작동하지 않습니다. 프레임워크에 오류가 있어 오류 수집에 액세스할 수 없습니다.
이 기사도 확인해 주세요.Microsoft는 검증 주제를 다루는 패턴과 관행에서 Enterprise Library(v4.0)를 공개했지만 WPF에 대한 검증을 포함하지 않은 이유를 잘 알고 있기 때문에 제가 안내하는 블로그 투고는 작성자가 이를 수정하기 위해 무엇을 했는지 설명하고 있습니다.이게 도움이 됐으면 좋겠네요!
WPF Application Framework(WAF)의 BookLibrary 샘플애플리케이션에 관심이 있는 경우가 있습니다.WPF에서 검증을 사용하는 방법 및 검증 오류가 발생했을 때 [Save]버튼을 제어하는 방법에 대해 설명합니다.
비즈니스 클래스가 UI에 의해 직접 사용되는 경우 IDataErrorInfo를 사용하는 것이 좋습니다.이는 로직이 소유자와 가까워지기 때문입니다.
비즈니스 클래스가 WCF/XmlWeb 서비스에 대한 참조에 의해 생성된 stub 클래스인 경우 IDataErrorInfo를 사용할 수 없거나 ExceptionValidationRule에서 사용할 예외를 슬로우할 수 없습니다.대신 다음 작업을 수행할 수 있습니다.
- custom ValidationRule을 사용합니다.
- WPF UI 프로젝트에서 부분 클래스를 정의하고 IDataErrorInfo를 구현합니다.
언급URL : https://stackoverflow.com/questions/63646/wpf-data-binding-and-validation-rules-best-practices
'programing' 카테고리의 다른 글
| Azure WebApp URL 이름을 변경하는 방법 (0) | 2023.04.22 |
|---|---|
| OneDrive를 통한 Excel의 풀네임 속성 (0) | 2023.04.22 |
| 설정에 정의된 값에 바인딩 (0) | 2023.04.22 |
| 표준 VBA 기능을 위한 "프로젝트 또는 라이브러리를 찾을 수 없습니다" (0) | 2023.04.22 |
| 로컬 머신에서 Azure Reposit으로 프로젝트 코드를 Import하는 방법 (0) | 2023.04.22 |