2011-05-09 8 views
3

몇 가지 유효성 검사를 설정 한 WPF 응용 프로그램에 여러 텍스트 상자가 있습니다.WPF 유효성 검사 - ValidatesOnTargetUpdated

로드시 응용 프로그램이 WPF 창의 컨트롤이 바인딩되는 클래스를 deserialises합니다.

나는 (예를 들어) 파일이 존재하는지 테스트하는 ValidationRule을 가지고 있습니다. ValidatesOnTargetUpdated를 설정하지 않으면 (바운드) 텍스트 속성을 변경할 때 해당 TextBox의 유효성이 검사되고 빨간색 테두리가 나타나고 오류 메시지가 표시된 툴팁 ({Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors).CurrentItem.ErrorContent})이 표시됩니다.

컨트롤이 propertychanged가 아닌 바인딩에서 유효성을 검사하여 ValidatesOnTargetUpdated를 true로 설정하고 디버깅 할 때 validationRule이 실행되는 것을 볼 수 있습니다.

내 문제는 ValidationRule 발생에도 불구하고 ValidatesOnTargetUpdated="True" 일 때 (기본) ValidationTemplate이 무시된다는 것입니다.

툴팁을 볼 수 있습니다 - 올바른 오류 메시지와 함께 표시되지만 테두리가 빨간색으로 표시되지 않습니다. 이것은 무시되는 것 같습니다.

왜 이런 일이 발생하는지 알고 싶습니다.

답변

2

당신은 이것을 forum post 읽을 수 있습니다. 나는 상황에 관련된 부분은 생각 :

문제 : 하나 사용자가 있다고 가정 할 수 있기 때문에 페이지가

이, 디자인입니다을로드 할 때 오류 템플릿하지 표시됩니다도우미가 실수하기 전에 오류 메시지를보고 싶지 않지만 때때로이 기능이 에 필요합니다. 따라서 ValidatesOnTargetUpdated 속성은 ValidationRule 클래스에 도입 된 이었습니다. 이 값을 true로 설정하면 확인 결과가 즉시 나타납니다. 그러나 한 가지주의 할 점이 있습니다 : 페이지가 초기화 된 후에 DataContext 을 설정해야합니다. 이 은 생성자 주석 라인 뒤에 이라는 초기화 코드가 있다고 표시된 생성자 설명 줄 또는 에 있거나 Loaded 이벤트에 있어야합니다. http://wpfglue.wordpress.com/2009/12/08/navigating-from-object-to-object/

그러나, 나는이 WPF 4.0에서 해결 될 것입니다 듣고 : 당신이 XAML에서 DataContext를 설정하려면 경우 여기이 문제에 대한 해결책을 찾을 수 있습니다.

편집 :

좀 더 영구적 인 링크

here를 찾을 수 있습니다.

+0

좋습니다, 저에게 감사드립니다. 내가이 일을 어떻게해야할지 모르겠다. 바인딩 후에 유효성 검사를 강제하는 또 다른 방법이 있습니까? – Drammy

+0

그 요청을 긁어 라 - 데이터 클래스에 대한 자체 유효성 검사를 수행하고 유효성을 나타 내기 위해 추가 컨트롤을 바인딩하기로 결정했습니다. – Drammy

+1

XAML에서 DataContext를 설정하려는 경우 솔루션이 있다고 언급했습니다.DataContext를 설정하기 위해 XAML을 사용할 때 발생하는 InitializeComponent가 호출되기 전에 DataContext를 설정하는 방법을 보여주는 제공된 링크에는 아무 것도 표시되지 않습니다. 이 점에 대해 더 명확하게 설명해 주시겠습니까? –

관련 문제