2010-06-24 2 views
1

나는 인터넷을 샅샅이 뒤졌지만 아직 해결책을 찾지 못했습니다. Stackoverflow-Kenobi, 당신은 나의 유일한 희망입니다!Silverlight : ComboBox의 양방향 바인딩이 null 인 BindingValidationError 처리기를 치지 않습니다.

그래서이 Silverlight 응용 프로그램이 있습니다. 맞습니까? 그리고 가능한 모든 값으로 초기화 될 때 채워지도록 nullable이 아닌 데이터베이스 필드에 바인딩 된 콤보 박스가 있습니다. 그리고 그 점에서 잘 작동합니다.

그러나 항목을 선택하지 않고 SubmitChanges를 실행하면 유효성 검사 오류가 발생하지 않으므로 myBindingValidationError 처리기가 활성화되지 않습니다. 이제 Null을 허용하지 않는 데이터베이스 열에 밀어 넣을 때 발생하는 오류가 예상됩니다 (그리고 다소 필요합니다). 그렇게하면 사용자가 항목을 선택하는 것을 알 수 있습니다.

값이 null이 아닌 경우 데이터베이스에 올바르게 전달됩니다. 기본적으로 바인딩은 잘 작동합니다. BindingValidationError 핸들러가 왜 안 맞는지 알 필요가 있습니다. 항목을 선택하지 않으면 ToggleError를 실행해야합니다. 미리

foo() 
{ 
    Binding databinding = new Binding(this.Id); 

    databinding.Source = bindingObject; 
    databinding.BindsDirectlyToSource = true; 
    databinding.Mode = BindingMode.TwoWay; 
    databinding.ValidatesOnDataErrors = true; 
    databinding.ValidatesOnExceptions = true; 
    databinding.ValidatesOnNotifyDataErrors = true; 
    databinding.NotifyOnValidationError = true; 
    databinding.UpdateSourceTrigger = UpdateSourceTrigger.Default; 

    CmbBox.DisplayMemberPath = _DisplayMemberPath; 
    CmbBox.SelectedValuePath = _SelectedValuePath; 
    CmbBox.SetBinding(ComboBox.SelectedItemProperty, databinding); 
    CmbBox.BindingValidationError += (sender, e) => ToggleError(e.Action == ValidationErrorEventAction.Added ? true : false , e.Error.ErrorContent.ToString()); 
} 

private void ToggleError(bool enableError, string errorMessage) 
{ 
    hasError = enableError; 
    if (hasError) 
    { 
     CmbBox.Foreground = new SolidColorBrush(Utilities.DarkRed); 
     Error.Visibility = Visibility.Visible; 
     this.errorMessage = errorMessage; 
    } 
    else 
    { 
     CmbBox.Foreground = new SolidColorBrush(Utilities.DarkGreen); 
     Error.Visibility = Visibility.Collapsed; 
     errorMessage = null; 
    } 
} 

감사합니다)

답변

1

양방향 바인딩 업데이트 및 세터 예외를 던지는 BindingValidationError 이벤트가 발생한다. ComboBox 값을 절대로 선택하지 않으면 Y 인딩은 절대로 갱신되지 않으며 절대로 오류를 _ 생하지 않습니다. SubmitChanges으로 전화하기 전에 직접 유효성 검사를해야합니다.

Silverlight 4를 사용하는 경우 INotifyDataErrorInfo을 사용하여 코드에서 유효성 검사를 수행 한 다음 UI를 업데이트하여 유효성 검사 오류를 표시 할 수 있습니다.

관련 문제