2010-08-03 5 views
0
  • 시나리오에서 나는 Linq2SQL 데이터 백엔드가 있습니다.
  • 내 데이터 객체 (만 값을 필요로 Validationrules을 실행하기 위해 빠른 지금까지 특별한 것이) IDataErrorInfo는 Name==null 같은 오류를 잡아WPF 긴 유효성 검사 시나리오

  • 데이터 객체는 트리 구조로 구성되어 구현, 그래서 각각의 부모를 가지고 있으며, 어린이

DataObjects의 부모 개체에서 선택한 이름이 고유 한 경우 어떻게 유효합니까?

내가 직면 한 문제는 고유 한 이름 유효성 검사가 이름에 TextBox 바인딩에 UpdateSourceTrigger="PropertyChanged" 인 경우 입력하는 동안 지연되는 데이터베이스 왕복이 필요하다는 것입니다.

반면에 UpdateSourceTrigger="LostFocus"을 설정할 수는 있지만 그 문제는 유효/유효하지 않은 데이터에 "저장"버튼을 활성화/비활성화한다는 것입니다. 이제 무효 상태에서 저장 단추를 클릭 할 수 없으므로 텍스트 상자가 포커스를 잃을 수있는 방법이 없습니다. 포커스를 업데이트하는 것만합니다 (탭을 사용하면 추한 것입니다 만 LostFocus에서는 더 많은 "사용 불가능"이 있습니다 (예 : 따라서) 이름을 변경

과 같이 다른 이벤트에 적용 할 개별 validationrules 말할 수있는 방법이었다 이상적 일 것입니다 무슨

:.

<TextBox Grid.Column="1"> 
    <TextBox.Text> 
     <Binding Path="Foldername"> 
      <Binding.ValidationRules> 
       <wpfresources:UniqueChildValidationRule ValidationStep="UpdatedValue" **UpdateSourceTrigger="LostFocus"**> 
        ... stuff here ... 
       </wpfresources:UniqueChildValidationRule> 
       <DataErrorValidationRule **UpdateSourceTrigger="PropertyChanged"**/> 
      </Binding.ValidationRules> 
     </Binding> 
    </TextBox.Text> 
</TextBox> 

어떻게이 문제를 해결하는 가장 좋은 방법은

? 수정

This MSDN article은 BindingGroup이 갈 길이 란 것을 제안하는 것처럼 보입니다. 그 조사거야 ... 그것은 가치가 무엇인지에 대한

답변

1

마침내 내가 원하는 것을 성취 할 방법을 찾았습니다.

BindingGroup을 사용

일했다,하지만 내가 필요로 무엇을 본질적으로 올바른 텍스트 상자에 Validationerror를 표시 할 수있는 방법 이었기 때문에 나는 아래로 내 솔루션을 제거.

은 내가 "저장"-functionality의 실행에 읽어 연결된 속성과 지금은 그렇게했다. 그런 다음 필자는 수동으로 유효성을 검사하고 텍스트 상자에 ValidationError를 설정합니다. 그런 식으로 텍스트 상자는 PropertyChanged UpdateSourceTrigger를 유지할 수 있고 오랜 검증은 제출시 완료됩니다.

0

, 잠재적으로 임의의 시간을 필요로 검증 (예를 들어, 네트워크를 통해 데이터베이스에 이야기)을 UI에 반영 할 필요가 없습니다 검증의 한 형태입니다 실시간. 예를 들어, 필요하기 전에 DB에서 값을 미리 캐싱하여 미리 값을 캐싱하여 작업하는 것이 좋을 수도 있지만,이 방법을 사용하면 더 나은 결과를 얻을 수 있습니다. 사용자가 입력 한 정보를 파괴하지 않는 한 사용자는 데이터를 제출했습니다.

+0

답변 greg에 감사드립니다. 사용자가 데이터를 제출 한 후에 오류를보고하는 것이 내 문제의 일부입니다. 타당성 확인은 분명히 작동하지 않았으며 다른 유효성 검사 규칙을 방해합니다. 내가 게시 한 솔루션이 이제는 나를 발견했다. –

관련 문제