Question

Validation Silverlight utilisant InotifidDaTerrorInfo fonctionnait bien avec son erreur slick s'affiche jusqu'à ce que je commence à essayer de l'utiliser sur des zones de texte liées à des propriétés des types de données non-chaînes.Mon plan était d'utiliser les setters des propriétés pour effectuer la logique de validation, en ajoutant et en supprimant les erreurs de là si nécessaire.Cela fonctionne très bien sur des cycbons qui sont des chaînes, mais si vous avez une zone de texte liée à un int et vous entrez une chaîne, le setter n'est même pas appelé (où je serais en mesure d'ajouter une erreur évidemment des valeurs non numériques.invalide).Quel est le plan d'action suggéré d'ici?J'ai examiné les évaluateurs, mais ils sont trop séparés de la logique inotifyDaTaerrorinfo de ma classe qui est validée.

Exemple hypothétique:

public class MyClass
{
    private string _prod;
    public string Prod
    {
        get { return _prod; }
        set //This works great
        {
            if (value.Length > 15)
            {
                AddError("Prod", "Cannot exceed 15 characters", false);
            }
            else if (value != _prod)
            {
                RemoveError("Prod", "Cannot exceed 15 characters");
                _prod= value;
            }
        }
    }

    private int _quantity;
    public int Quantity
    {
        get { return _quantity; }
        set //if a string was entered into the textbox, this setter is not called.
        {
            int test;
            if (!int.TryParse(value, test))
            {
                AddError("Quantity", "Must be numeric", false);
            }
            else if (test != _quantity)
            {
                RemoveError("Quantity", "Must be numeric");
                _quantity= test;
            }
        }
    }

    protected Dictionary<String, List<String>> errors = 
        new Dictionary<string, List<string>>();

    public void AddError(string propertyName, string error, bool isWarning)
    {
        //adds error to errors
    }
    public void RemoveError(string propertyName, string error)
    {
        //removes error from errors
    }

    //INotifyDataErrorInfo members...
}

Était-ce utile?

La solution

Je vous suggère de lier la valeur de la zone de texte à une valeur de chaîne de toute façon et faites la validation là-bas. En cas de validation réussie, passez la valeur sur une autre propriété avec le type de données que vous recherchez (par exemple. int).Dans aucun autre cas, échouez la validation. Juste une solution de contournement ... mais travaille pour moi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top