10

Apr

WPF DynamicEntity for code-free Notification and DataValidation

Ciao a tutti

 

Usare XAML con modelli ed entità complesse o meno è spesso tediante

Servono tante implementazioni, prima fra tutte INotifyPropertyChanged, spesso tediante da mettere a tappeto

Poi IDataErrorInfo per la validazione offre altro lavoro al programmatore che spesso ha bisogno di semplici classi POCO giusto per contenere da qualche parte le proiezioni dei propri dati

 

Un componente semplice per facilitare tutto questo è http://code.msdn.microsoft.com/WPF-DynamicEntity-for-code-acb9c2fe

grazie a questo componente, ad esempio, una POCO Person diventerà così:

 

[NotificableProperty("Name", typeof(string), true, 20)]
[NotificableProperty("Surname", typeof(string), true, 20)]
[NotificableProperty("Age", typeof(int))]
public class PersonModel : NotificableEntity
{
    //a readonly property
    public string FullName()
    {
        return string.Format("{0} {1}", dthis.Name, dthis.Surname);
    }

    //a writable property getter
    public string CommmaSeparatedFullName()
    {
        return string.Format("{0}, {1}", dthis.Name, dthis.Surname);
    }

    //a writable property setter
    public void CommmaSeparatedFullName(string arg)
    {
        try
        {
            var s = arg.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).Select(x => x.Trim());
            dthis.Name = s.First();
            dthis.Surname = s.Last();
        }
        catch (Exception)
        {
        }
    }

    //a custom validation
    protected override bool CustomValidation(string propertyName, out string errorMessage, object value)
    {
        if (propertyName == "Age" && Convert.ToInt32(value) > 100)
        {
            errorMessage = "Age exceded maximum value";
            return false;
        }
        else
            return base.CustomValidation(propertyName, out errorMessage, value);
    }
}

 

si accettano feedback Sorriso

a presto

by Antonio Esposito on 4/10/2012