나는 인터넷을 샅샅이 뒤졌지만 아직 해결책을 찾지 못했습니다. 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;
}
}
감사합니다)
론