Questa cosa è una figata!, Raff ha la sua e io mi sono fatto, come Raff da tempo immemore (dal fx 1.1, poi con rimaneggiamenti vari nel tempo per adattarla alle nuove feature), la mia implementazione che a breve upgraderò a INotifyCollectionChanged e ICollectionView per stare al passo con i tempi.
Ma torniamo alle cose importanti, uno dei dettami di M-V-VM è, o meglio sarebbe, quello di non esporre mai direttamente il Model alla View; ad esempio esporre una IList<Address> direttamente dal VM non è proprio il massimo, funziona ma ha qualche magagna fastidiosa. Sempre meglio avere uno strato in mezzo in cui poter iniettare logica che è pertinenete solo ed esclusivamente al layer di presentazione.
Complice la mia nuova passione sfrenata per WPF ho dotato il mio framework di una nuova funzionalità:
var source = new IAddress[ 10 ]{ ... };
var items = new EntityCollection<IAddress>( source ).DefaultView;
items.AddPropertyMapping( "FullAddress", typeof( String ), obj =>
{
return String.Format( "{0}, {1} - {2} {3} ({4})", obj.StreetAddress, obj.StreetNumber, obj.ZipCode, obj.City, obj.Province );
} );
è adesso infatti possibile aggiungere delle propretà calcolate direttamente a runtime e queste verranno viste da colui con cui siamo in binding come se fossero effettivamente esposte e presenti sulla collection, togo :-D
Per i curiosi, funziona anche in scrittura :-D e ci sono un po’ altre possibilità, basta metterci pure il setter:
items.AddPropertyMapping( "FullAddress", typeof( String ), obj =>
{
return bla… bal…
}, ( obj, value ) =>
{
//Setter
} );
.m