2012-02-15 2 views
1

입력에 양방향 바인딩이있는 TextBox가 있습니다. 비어있는 경우 유효성 검사에 실패하고 비어있을 수 없다는 내용의 도구 설명이 표시되도록 설정됩니다. 내 문제는 그것이 유효성 검사에 실패했기 때문에 텍스트 상자가 바뀔 때마다 (즉 모든 키를 누를 때마다) 바인딩을 업데이트하려고 시도한다는 것입니다. 모든 키를 누를 때마다 소스를 업데이트하고 싶지 않습니다. 나는 DataField.cs의 실버 라이트 4.0 도구 키트에이 코드로 좁혀했습니다 : 그것은)합니다 (ValidationUtil.UpdateSourceOnElementBindings에 떨어지는TextBox 텍스트의 원본 바인딩을 항상 업데이트하는 DataField가 유효성 검사에 실패한 텍스트 상자로 변경되었습니다.

private void OnTextBoxTextChanged(object sender, TextChangedEventArgs e) 
{ 
    TextBox textBox = sender as TextBox; 

    if (textBox != null && (ValidationUtil.ElementHasErrors(textBox) || !this._lostFocusFired[textBox])) 
     { 
      this._lostFocusFired[textBox] = false; 
      ValidationUtil.UpdateSourceOnElementBindings(textBox); 
     } 
} 

요소에 오류가 있기 때문이다. 어쨌든이 일을 막을 수 있습니까?

답변

0

귀하의 의도를보다 정확하게 표현하기 위해 조건을 재정리하는 데 도움이 필요하다고 생각하지만 기존 코드의 결과가 무엇인지 명확하지 않습니다. 이것이 우리가 실행 가능한 완벽한 테스트 케이스를 요구하는 이유입니다. 당신은 단순히 실패로 인해 검증에 업데이트하지 않는 경우,이 트릭을 수행해야합니다

private void OnTextBoxTextChanged(object sender, TextChangedEventArgs e) 
{ 
    TextBox textBox = sender as TextBox; 

    if (textBox != null && !this._lostFocusFired[textBox])) 
    { 
     ValidationUtil.UpdateSourceOnElementBindings(textBox); 
    } 
} 

당신은 입력의 유효성을 검사하고 그 경우 문 밖에서 결과에 반응 할 수 있습니다.

관련 문제