IBindingListView…
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 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à:
è 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 :-Dvar 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 ); } );
Per i curiosi, funziona anche in scrittura :-D e ci sono un po’ altre possibilità, basta metterci pure il setter:
.mitems.AddPropertyMapping( "FullAddress", typeof( String ), obj => { return bla… bal… }, ( obj, value ) => { //Setter } );