Domanda

Silverlight Convalida utilizzando InotifyDataErroRinfo stava lavorando bene con il suo errore di errore di slick fino a quando non ho iniziato a provare a utilizzarlo su caselle di testo che sono legato alle proprietà dei tipi di dati non stringa.Il mio piano era quello di utilizzare i setter delle proprietà per eseguire la logica di convalida, aggiungere e rimuovere gli errori da lì se necessario.Funziona alla grande sulle caselle di testo che sono stringhe, ma se hai una casella di testo legata a un int e inserisci una stringa, il setter non viene nemmeno chiamato (dove sarei in grado di aggiungere un errore che ovviamente i valori non numerici sononon valido).Qual è la linea d'azione suggerita da qui?Ho esaminato ValueConverter, ma sono troppo separati dalla logica InotifyDataerRinfo nella mia classe che viene convalidata.

Esempio ipotetico:

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...
}
.

È stato utile?

Soluzione

Ti suggerisco di associare il valore della casella di testo a un valore di stringa comunque e fai la convalida lì. In caso di convalida di successo passando il valore su un'altra proprietà con il tipo di dati che stai cercando effettivamente (ad es. Int).In qualsiasi altro caso, fallire la convalida. Solo una soluzione alternativa ... ma funziona per me.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top