Mostrare messaggi di validazione utilizzando IDataErrorInfo in Silverlight 4.0

di Alessio Leoncini, in Silverlight 4.0,

In Silverlight 3.0 l'engine di data binding è stato arricchito delle funzionalità di intercettazione degli errori di validazione, qualora un dato immesso dall'utente non rispetti precise regole definite nel codice.

Come introdotto nell'articolo https://www.silverlightitalia.com/articoli/silverlight/le-novita-silverlight-3.0-beta-1-p-5.aspx, questo è possibile valorizzando a true l'attributo ValidateOnExceptions e lanciando un'eccezione nel set della proprietà in binding con modalità TwoWay.

In alcuni scenari sollevare un'eccezione nel set di una proprietà potrebbe non essere applicabile: in Silverlight 4.0 è stato aggiunto l'attributo ValidatesOnDataErrors attraverso cui possiamo gestire i messaggi di validazione elaborati implementando l'interfaccia IDataErrorInfo nelle nostre entità.

Per implementare l'interfaccia occorre inserire la proprietà Error che può contenere i messaggi di errore di tutta l'entità, e un indicizzatore di default, con il quale possiamo intercettare la valorizzazione di ciascuna proprietà e restituire una semplice stringa come messaggio di errore qualora non siano rispettate le nostre regole di validazione.

C#
#region IDataErrorInfo Members
public string Error
{
    get
    {
        return null;
    }
}

public string this[string columnName]
{
    get
    {
        switch (columnName)
        {
            case "FirstName":
                if (string.IsNullOrEmpty(this.FirstName))
                {
                    return "* campo obbligatorio";
                }
                break;
        }
        return null;
    }
}
#endregion

Come abbiamo detto, nel markup è sufficiente specificare l'attributo ValidatesOnDataErrors:

XAML
<TextBox Text="{Binding FirstName, Mode=TwoWay, ValidatesOnDataErrors=True, NotifyOnValidationError=True}" />

Nel nostro esempio, in caso di assenza di valore, avremo il seguente risultato:

Nella definizione dell'espressione di binding dell'esempio precedente è specificato anche l'attributo NotifyOnValidationError a true, se andiamo ad inserire il controllo ValidationSummary avremo automaticamente il riepilogo (dinamico) di tutti gli errori generati:

Nel codice allegato è possibile trovare la completa implementazione.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

Nessuna risorsa collegata

I più letti di oggi