2012-12-26 2 views
0

WPF에 텍스트 상자가 있고 LostFocus 이벤트에 명령을 바인딩하고 해당 명령에서 유효성 검사를 수행합니다.WPF의 이벤트 및 명령 바인딩

지금 같은 창에 나는 그의 키 바인딩 Ctrl 키 + S.

있는 저장 버튼을 한 경우 일부 텍스트 상자의 변화를 다음 Ctrl + S를 누르면, 그것은 잃어버린 포커스를 발생시키지 않고 저장 명령을 실행하는 메이크업 내 텍스트 상자에 이벤트.

이것은 의도적으로 설계된 것입니다.

하지만 명령을 저장하기 전에 해당 코드를 실행하려면 저장 프로세스에서 해당 코드를 하드 코딩 할 수 없습니다. 포커스가 텍스트 상자에있는 경우에만 실행하고 싶습니다.

+0

그렇지 않으면 유효성 검사 코드를 실행할 수 있습니까? 그렇다면 isValidated = true와 같은 플래그를 설정하십시오. 그리고 저장 명령에서 플래그가 true로 설정된 경우에만 저장 코드를 실행하십시오. – ryadavilli

+0

@ryadavilli 그건 분명히 효과가 있지만, 해킹처럼 보입니다. 이 문제에 대한 진정한 해결책이 있습니까? – MegaMind

답변

0

LostFocus 및 저장 명령 모두에서 호출 할 수있는 별도의 메서드로 유효성 검사 코드를 인수 분해해야합니다. 저장에서 LostFocus를 호출하는 것은이 논리를 구현하는 나쁜 방법입니다.

새 메서드는 유효성 검사가 성공했는지 여부를 나타내는 부울을 반환 할 수 있습니다. LostFocus 명령 바인딩에 의존하지 않는 유효성 검사를 수행하는 더 좋은 방법이 있습니다. 내 블로그 게시물 Taking data binding, validation and MVVM to the next level - part 1 (영문) 아이디어를 확인하십시오.

+0

위대한 기사, 매우 enlighting. 하지만 내 텍스트 상자에는 전화 번호가 없으므로 일부 기본 서식이 포함되어 있습니다. 사용자가 포커스를 잃을 때 텍스트 상자의 유효성을 검사 할 때이 서식을 지정합니다. 귀하의 기사에 따라 나는 소스 속성을 업데이트 할 때마다 사용자가 변경해야합니다. 그렇게하면 모든 변경시 생성자가 해고되고 텍스트 상자의 데이터 서식이 지정됩니다. – MegaMind