Я искал в интернете и пока не нашел решения. Помоги мне Stack-Overflow-Kenobi, ты моя единственная надежда!
Итак, у меня есть это приложение Silverlight, верно? И у меня есть поле со списком, которое привязано к необнуляемому полю базы данных, чтобы оно заполнялось при инициализации всеми возможными значениями. И это нормально работает в этом отношении.
Однако, когда я SubmitChanges не выбрав элемент, ошибка валидации не выдается, поэтому мой обработчик BindingValidationError никогда не активируется. Теперь я ожидал (и, скорее всего, нужно), что будет выдано сообщение об ошибке при нажатии на ноль в столбец базы данных, не обнуляемый. Таким образом, пользователь знает, как выбрать элемент.
Когда значение не равно нулю, оно просто отправляется в базу данных. По сути, привязка работает нормально: мне просто нужно знать, почему обработчик 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;
}
}
Спасибо заранее :)
Cameron