Pregunta

Silverlight Validación El uso de inotifydataerrorinfo estaba funcionando de manera ideal con sus pantallas de errores resbaladizas hasta que comencé a intentar usarlo en los cuadros de texto que están unidos a las propiedades de los tipos de datos no cadenales.Mi plan debía usar los colonos de las propiedades para realizar la lógica de validación, agregando y eliminando errores desde allí como sea necesario.Funciona excelente en los cuadros de texto que son cadenas, pero si tiene un cuadro de texto unido a un INT e ingresa una cadena, el setter ni siquiera se llama (donde podría agregar un error que obviamente valores no numéricos seaninválido).¿Cuál es el curso de acción sugerido desde aquí?He mirado a ValueConverters, pero están muy lejos de la lógica de InotifyDataErrorinfo en mi clase que se está validando.

Ejemplo hipotético:

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

¿Fue útil?

Solución

Le sugiero que vincule el valor del cuadro de texto a un valor de cadena de todos modos y haga la validación allí. En caso de que una validación exitosa pase el valor a otra propiedad con el tipo de datos que realmente está buscando (por ejemplo, int).En cualquier otro caso, falle la validación. Solo una solución ... pero funciona para mí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top