WPF 검증에서 ValidateOnNotifyDataErrors 및 ValidateOnDataErrors와 NotifyOnValidationErrors의 차이점은 무엇입니까?
WPF 검증에서 다음과 같은 차이점은 무엇입니까?
OnNotify 데이터 오류 확인 = 참
OnData 오류 확인 = 참
유효성 검사 시 알림 오류 = 참
XAML에서 이러한 속성을 올바르게 사용해야 하는 경우는 언제입니까?
ValidatesOnNotifyDataErrors
그리고.ValidatesOnDataErrors
XAML 바인딩된 컨트롤이 ViewModel/Model에 구현된 인터페이스를 기반으로 입력의 유효성을 검사하기를 원할 때 사용됩니다.ValidatesOnNotifyDataErrors
그 인터페이스는 에 대한 것입니다.ValidatesOnDataErrors
그것은 입니다.
예를 들어 다음과 같은 뷰 모델이 있다고 가정합니다.
class PersonViewModel : IDataErrorInfo {
public string FirstName {get; set;}
string IDataErrorInfo.Error
{
return string.Empty;
}
string IDataErrorInfo.this[string columnName] {
if (columnName == "FirstName" &&) {
if (this.FirstName.Length > 20)
return "FirstName can't be more than 20 characters.";
}
return string.Empty;
}
}
그러면 다음과 같은 이름 속성에 바인딩된 텍스트 상자가 표시됩니다.<TextBox Text={Binding Path=FirstName, ValidatesOnDataErrors=True} />
이제 사용자가 텍스트 상자에 20자 이상을 입력하면 오류가 감지됩니다.
반면에NotifyOnValidationError
경계가 유효성 검사에 실패할 때 이벤트를 발생시킬 때 사용됩니다.
주로 사용합니다.ValidatesOnDataErrors
유효성 검사를 위한 XAML 제어 장치에서 나머지 두 가지는 필요하지 않으므로 상황에 따라 다릅니다.
편집: 몇 가지 새로운 것을 알게 되어 답변을 업데이트합니다. 따라서 관련성을 높여야 합니다.
ValidatesOnDataErrors
즉, 데스크톱 WPF 또는 WinForm 애플리케이션과 같은 클라이언트 측에서 검증을 수행하고 모델 개체를 구현할 때 사용됩니다.IDataErrorInfo
.
반면에,ValidatesOnNotifyDataErrors
서버에서 검증이 수행되는 클라이언트-서버 애플리케이션(Silverlight, WCF 포함 WPF 등)과 같은 씬 클라이언트(다계층 애플리케이션)에 더 적합합니다.
이러한 방식으로 사용자가 TextBox에 무언가를 입력하면 유효성 검사를 위해 값이 비동기식으로 서버로 전송되고, 유효성 검사 결과가 반환되면 이벤트가 발생합니다(정확히는 ErrorsChanged 이벤트). 그러면 뷰는 해당 값을 선택하여 적절한 방법을 사용하여 표시합니다(이 경우 모델이 구현합니다).INotifyDataErrorInfo
.
참고로.IDataErrorInfo.Error
WPF에서 사용되지 않으며 null을 반환하거나 null을 던질 수 있습니다.NotImplementedException
.
이 속성은 WinForms에서 사용되었습니다.
개인적으로, 저는 사용하는 것을 선호합니다.INotifyDataErrorInfo
단일 속성에 여러 개의 오류 메시지를 매핑할 수 있기 때문입니다.
언급URL : https://stackoverflow.com/questions/17254847/what-is-the-difference-between-validatesonnotifydataerrors-and-validatesondataer
'source' 카테고리의 다른 글
메이븐 프로젝트 업데이트 오류 해결 방법지원되지 않는 IClasspathEntrykind=4? (0) | 2023.05.09 |
---|---|
Github 사용 권한 거부: SSH add 에이전트에 ID가 없습니다. (0) | 2023.05.09 |
개체를 삭제하고 null로 설정해야 합니까? (0) | 2023.05.09 |
왜 그럴까요?NET은 은행원 반올림을 기본값으로 사용합니까? (0) | 2023.05.09 |
Git에서 계속 암호를 묻는 메시지가 표시됩니다. (0) | 2023.05.09 |