Silverlight: Двусторонняя привязка в ComboBox не удаляет обработчик BindingValidationError со значением NULL - PullRequest
1 голос
/ 25 июня 2010

Я искал в интернете и пока не нашел решения. Помоги мне 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

1 Ответ

1 голос
/ 25 июня 2010

Событие BindingValidationError возникает, когда привязка TwoWay обновляется, и установщик выдает исключение. Если вы никогда не выберете значение для ComboBox, то Привязка никогда не будет обновляться и никогда не выдаст ошибку. Вы должны сделать проверку самостоятельно, прежде чем позвонить SubmitChanges.

Если вы используете Silverlight 4, возможно, вы захотите использовать INotifyDataErrorInfo для проверки вашего кода, а затем обновите пользовательский интерфейс, чтобы отобразить ошибку проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...