Le funzionalità di Data Binding consentono una buona separazione tra le sorgenti dati e la loro visualizzazione nelle interfacce utente, definendo direttamente nel markup il nome dei campi degli oggetti associati a ciascun controllo.
Text="{Binding Path=Title}"
Qualora ci sia l'esigenza di manipolare i dati in Binding, come ad esempio per una renderizzazione diversa, è possibile realizzare classi Converter personalizzate in modo da modificare il valore da associare al controllo lasciando inalterato il dato originale.
Tali classi devono implementare l'interfaccia IValueConverter:
public class TitleConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } }
<UserControl x:Class="ASPItalia.ImageGallery.MediaItem" xmlns:MediaItem="clr-namespace:ASPItalia.ImageGallery" Cursor="Hand"> <UserControl.Resources> <MediaItem:TitleConverter x:Key="TitleConverter"></MediaItem:TitleConverter> </UserControl.Resources>
Text="{Binding Path=Title, Converter={StaticResource TitleConverter}}"
Text="{Binding Path=Title, Converter={StaticResource TitleConverter}, ConverterParameter=20}"public class TitleConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { int _lenght = 0; string _strLenght = parameter as string; if (_strLenght != null) int.TryParse(_strLenght, out _lenght); string _value = value as string; if (_value != null && _lenght > 0 && _value.Length >= _lenght) { _value = _value.Substring(0, _lenght); _value = String.Format("{0}..", _value); } return _value; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { //implementazione specifica per il binding two-way throw new NotImplementedException(); } }
Con questa semplice classe TitleConverter, il ConverterParameter definisce quando il testo "Title" debba essere esteso e troncato posponendo due puntini "..". La possibilità di definire il valore direttamente nel markup aggiunge velocità allo sviluppo ed alla manutenzione del progetto.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.