J'ai parcouru internet et n'ai pas encore trouvé de solution. Aide-moi Stack-Overflow-Kenobi, tu es mon seul espoir!Silverlight: la liaison bidirectionnelle sur ComboBox ne touche pas le gestionnaire BindingValidationError avec null
J'ai donc cette application Silverlight, non? Et j'ai un combobox qui est lié à un champ de base de données non-nullable de sorte qu'il est rempli à l'initialisation avec toutes les valeurs possibles. Et ça fonctionne bien à cet égard. Cependant, lorsque je SoumetsChanges sans avoir sélectionné un élément, aucune erreur de validation n'est levée, mon gestionnaire BindingValidationError n'est jamais activé. Maintenant je m'attendrais (et j'ai besoin d'une erreur) à être jeté en poussant null dans une colonne de base de données non-nullable. De cette façon, l'utilisateur sait sélectionner un élément.
Lorsque la valeur n'est pas nulle, elle est très bien transmise à la base de données. Fondamentalement, la liaison fonctionne bien: j'ai juste besoin de savoir pourquoi le gestionnaire BindingValidationError n'est pas touché. ToggleError doit être exécuté si aucun élément n'est sélectionné.
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;
}
}
Remerciez à l'avance:)
Cameron