Silverlight

XAML e Binding : l’utilità della proprietà UpdateSourceTrigger

Supponiamo di voler effettuare il binding tra la proprietà Text di una TextBox della nostra UI ed una proprietà di tipo String definita nel ViewModel associato alla nostra pagina. Impostando la modalità di binding a TwoWay, ci rendiamo subito conto che il set della proprietà del ViewModel avviene solo ed esclusivamente quando il campo di testo perde il fuoco (quindi sul lost focus).

<TextBox x:Name="MyTextBox" Text="{Binding MyText, Mode=TwoWay}"/>

 

public string MyText
{
get { return this.myText; }
set
{
if (this.myText!= value)
{
this.myText= value;
this.OnPropertyChanged("MyText");
}
}
}

Talvolta questo non è il comportamento desiderato ed abbiamo la necessità che la nostra proprietà del ViewModel venga aggiornata ogni qual volta cambia il testo all’interno del campo.

La spiegazione di questo comportamento sta nel valore di default che la proprietàUpdateSourceTrigger del binding assume nel caso di una TextBox. LaUpdateSourceTrigger determina il momento in cui la sorgente del binding (binding source) viene aggiornata dalla destinazione del binding (binding target) nel caso di modalità two-way. Nel nostro caso il binding source è la proprietà del nostro ViewModel (ossia MyText) mentre il binding target è la proprietà Text della nostra TextBox (ricordiamo che è la proprietà di default del binding in una TextBox, ecco perchè non compare nella markup expression dell’esempio).

I possibili valori dell’enumerativo assegnabili alla UpdateSourceTrigger sono :

  • Default : il binding source è aggiornato quando il valore del binding target cambia;
  • Explicit : il binding source è aggiornato solo quando viene invocato in maniera esplicita il metodo BindingExpression.UpdateSource();

Per ogni controllo della UI il valore è tipicamente Default e nel caso della TextBox, in particolare, significa che il corrispondente binding source verrà aggiornato al lost focus.

Per cambiare il comportamento basta specificare nella markup expression di binding l’UpdateSourceTrigger ad Explicit.

<TextBox x:Name="MyTextBox"
         Text="{Binding MyText, Mode=TwoWay, UpdateSourceTrigger=Explicit}"
         TextChanged="MyTextBox_TextChanged"/>

Come si evince dallo XAML è però necessario un ulteriore passo ossia quello di registrare l’evento di TextChanged della TextBox ed all’interno dell’event handler ricavere la binding expression per invocare su di essa l’esplicito aggiornamento del binding source.

private void MyTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
    this.MyTextBox.GetBindingExpression(TextBox.TextProperty).UpdateSource();
}

Da codice, attraverso il metodo GetBindingExpression() sul controllo della UI è possibile ricavare l’espressione di binding per una specifica dependecy property (nel nostro caso la proprietà Text). Sull’espressione è poi possibile forzare l’aggiornamento del binding source attraverso il metodo UpdateSource().

Advertisements

Expression Blend 4 : errore di build “Debug|MCD is invalid”

Iniziando ad utilizzare Expression Blend 4 per lo sviluppo della UI di applicazioni su Windows Phone 7, mi sono imbattuto nel seguente errore in fase di compilazione :

The specified solution configuration “Debug|MCD” is invalid.

come riportato in maniera completa nella figura seguente

8308.BuildError1_0658CA01

Per risolverlo, è necessario navigare attraverso il Registry Editor alla seguente percorso :

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

e cancellare il valore MPD dalla chiave Platform.

0434.BuildError2_6E05AFE5

Fatto ciò, il progetto in Expression Blend, compilerà correttamente.

6724.BuildError3_41104D0A

Windows Phone 7 : una serie su channel9 per gli sviluppatori ed un nuovo libro per gli utilizzatori

4265.channel9_wp7_series_thumb_509204BF

Posto il link ad una serie pubblicata su channel9 sullo sviluppo per Windows Phone 7 che può essere un buon punto di partenza per iniziare a sviluppare applicazioni per la nuova piattaforma phone di Microsoft.

Windows Phone 7 : development for absolute beginners

4113.wp7_book_plainsimple_thumb_47955AF6

Inoltre, è stato pubblicato il nuovo libro “Windows Phone 7 Plain & Simple” di Michael Stroh. E’ completamente a colori e con numerosi screenshot che con semplici passi ci guida alla scoperta delle potenzialità di Windows Phone 7 : fare o rispondere alle chiamate, leggere ed inviare emails e messaggi, lavorare con il calendario, utilizzare il browser, ascoltare musica e vedere video e sviluppare giochi con XNA.

Esso è disponibile in vendita online da ieri ed è pubblicato dalla O’Really al seguente link.

Windows Phone 7 : PDC2010

2337.pdc2010.bmp-550x0             6646.windowsphone_logo.png-550x0

Da qualche giorno si è concluso il PDC2010 che ho seguito online, in diretta ed in streaming con molto interesse.

Di seguito riporto i link alle sessioni registrate e relative a Windows Phone 7, in particolare allo sviluppo delle applicazioni con Silverlight ed i giochi con XNA :

Building Windows Phone 7 applications with the Windows Azure Platform

Things I Wish I Knew Three Months Ago about Building Windows Phone 7 Applications

Optimizing Performance for Silverlight Windows Phone 7 Applications

Things You Need to Know Before Building XNA Games for Windows Phone 7

Real-World Analysis and Optimization of XNA Framework Games on Windows Phone 7

Buona visione a tutti !