2010-06-24 7 views
1

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

Répondre

1

Les BindingValidationError événement se déclenche lorsqu'un TwoWay de liaison est mise à jour et le poseur renvoie une exception. Si vous ne sélectionnez jamais de valeur pour ComboBox, la liaison n'est jamais mise à jour et ne génère jamais d'erreur. Vous devez effectuer vous-même la validation avant d'appeler le SubmitChanges.

Si vous utilisez Silverlight 4, vous pouvez utiliser INotifyDataErrorInfo pour effectuer la validation dans votre code, puis mettre à jour l'interface utilisateur pour afficher l'erreur de validation.

Questions connexes