2014-01-11 6 views
0

마지막 질문의 본질을 이해하고 설명에 좀 더 명확하게하려고합니다.WPF 유효성 검사 및 CanExecute 명령

두 개의 텍스트 필드와 "저장"버튼으로 새 데이터를 제출하는 WPF 양식이 있습니다. 두 텍스트 필드는 필수 입력란이며 ViewModel 속성에 바인딩됩니다. 버튼은 Execute 및 CanExecute 메서드를 사용하여 "Execute"릴레이 명령에 바인딩됩니다. CanExecute는 ViewModel의 HasErrors를 반환합니다. ViewModel은 INotifyPropertyChanged 및 INotifyDataErrorInfo 인터페이스를 구현합니다. 속성 설정자는이 속성에 대해서만 유효성 검사를 실행합니다.

목표는 다음과 같습니다

  • 처음 "저장"버튼을 비활성화합니다.
  • 모든 속성 변경시 전체 ViewModel의 유효성을 검사하지 않고 두 텍스트 필드의 유효성을 검사 한 경우에만 "저장"단추를 사용하십시오.

첫 번째 목표의 경우 첫 번째 유효성 검사가 수행되는 즉시 초기 false이고 true가되는 isValidated bool 속성을 사용합니다. 이 속성은 CanExecute 메서드의 HasErros와 함께 확인됩니다. 더 우아한 방법이 있습니까?

두 번째 목표를 구현하는 방법을 모릅니다. 이것에 대한 어떤 생각?

THX

+0

'ICommand'의 구현은 무엇을 사용하고 있습니까? 'RaiseCanExecuteChanged()'메소드 또는 유사 메소드를 가지고 있습니까? 해당 속성이 변경 될 때마다 호출하십시오. – Gusdor

+0

Execute 및 CanExecute 메서드 만 구현했습니다. RaiseCanExecuteChanged()의 구현은 어떻게 도움이 될까요? – toppless

+0

CanExecuteChanged 이벤트 구현입니다. 공개 이벤트 EventHandler CanExecuteChanged { add {CommandManager.RequerySuggested + = value; } remove {CommandManager.RequerySuggested - = value; } } – toppless

답변

0

두 가지 목표는 실제로 한 가지 목표에 불과합니다.

• 모든 속성 변경시 전체 ViewModel의 유효성을 검사하지 않고 두 텍스트 필드의 유효성을 검사해야만 "저장"버튼을 사용할 수 있습니다.

처음에, 텍스트 필드는 그래서 아마도 그들은 것 하지 패스 검증, 비어 있습니다. 따라서 처음에, 당신의 Save Button 당신의 첫 번째 목표에 따라, 비활성화됩니다

• 처음 "저장"버튼을 비활성화합니다.

둘째로, (당신은 아마 당신은이 게시물에서 언급하려고하는 경우에 대한 링크를 추가해야합니다) 당신의 마지막 질문에, 당신은 CanExecute 핸들러에서 !HasErros을 사용하여 몇 가지 문제가 있었다. 이번에는 두 번째 요구 사항을 충족하기 위해 모든 속성의 유효성을 검사해야합니다. CanExecute 처리기에서 !HasErros을 사용하면됩니다.