Chi deve realizzare la parte dell'applicazione che ha l'onere di interagire con l'utente, certamente si sarà reso conto che superato lo scoglio creativo, necessario a creare qualcosa di accattivante, la parte più complessa è trovare una soluzione, possibilmente semplice, per creare un collegamento tra gli elementi dell'UI (user interface) e le informazioni provenienti dalla logica business. Quest'attività in genere prende il nome di DataBinding.
Perché DataBinding?
WPF (Windows Presentation Fundation) semplifica quest'attività allo sviluppatore, mettendogli a disposizione un sistema semplice e allo stesso tempo potente per mantenere un collegamento tra gli elementi dell'interfaccia e le entità di business. Tutto quello di cui abbiamo bisogno possiamo trovarlo nel namespace System.Windows.Data.
Immaginiamo una semplice applicazione WPF: parte dell'interfaccia comprende una Grid con una sola colonna e due righe, la prima della quale è occupata da una TextBox e la seconda da uno Slider, il nostro compito è visualizzare il valore selezionato di quest'ultimo nella TextBox.
Potremo creare un event handler per l'evento ValueChanged e nel corpo del metodo impostare manualmente la proprietà Text della TextBox.
<Grid ShowGridLines="True" > <Grid.ColumnDefinitions> <ColumnDefinition ></ColumnDefinition> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition></RowDefinition> <RowDefinition></RowDefinition> </Grid.RowDefinitions> <TextBox Grid.Column="0" Grid.Row="0" Name="MyTextBox"/> <Slider Grid.Column="0" Grid.Row="1" Name="MyScroll" ValueChanged="ValueChangedeventHanlder"/> </Grid> private void ValueChangedeventHanlder(object sender, RoutedPropertyChangedEventArgs<double> e) { MyTextBox.Text = e.NewValue.ToString(); }
Ci siamo trovati centinaia di volte a scrivere righe di codice per certi versi simili, se non identiche a quelle precedenti e non rappresentano certo quindi una novità. Proseguiamo rimuovendo l'event handler, al suo posto utilizzeremo la classe Binding (namespace System.Windows.Data). Il nuovo codice sarà inserito nel costruttore del tipo MyWindows: la finestra principale della nostra applicazione.
public partial class MyWindow : System.Windows.Window { public MyWindow() { InitializeComponent(); Binding _binding = new Binding(); _binding.Source = MyScroll; _binding.Path = new PropertyPath("Value"); MyTextBox.SetBinding(TextBox.TextProperty, _binding); } }
A prima vista questa soluzione se confrontata con la precedente, non sembra particolatamente attraente; addirittura le righe di codice sono passate da una alle attuali quattro. Passiamo comunque all'analisi del codice. La prima riga crea un'istanza della classe Binding, quest'oggetto descrive le caratteristiche del DataBinding , come la sorgente dati che impostiamo nella riga successiva tramite la proprietà Source del tipo Object. Come il tipo della proprietà suggerisce, è possibile utilizzare qualsiasi oggetto come fonte dati, dal controllo, nel nostro caso lo Slider, a qualsiasi classe compatibile con il CLR o fonti dati in formato xml. Proseguiamo impostando la proprietà Path, la quale identifica la proprietà nella sorgente dati dalla quale prelevare il valore per aggiornare la TextBox, nel nostro caso è sufficiente indicare il nome della proprietà "Value" dello slider.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.