Usare fiddler con l’emulatore Windows Phone

Per usare fiddler con l’emulatore bisogna fare così:

1. Da “Tools | Fiddler Options” settare l’opzione evidenziata e confermare cliccando su OK:

image

2. Nella QuickExec box sotto la lista delle sessioni, digitare “prefs set fiddler.network.proxy.registrationhostname <Host> dove<Host> e il nome del vostro desktop:

image

3. Riavviare Fiddler.

4. Avviare (o riavviare) l’emulatore Windows Phone 7

Per verificare il funzionamento, aprire Internet Explorer nell’emulatore e controllare che il traffico venga visualizzato in Fiddler.

Maggiori info qui.

That’s all folks!

[WP7] Forzare il binding di una TextBox

Generalmente il binding two-way di una textbox aggiorna la proprietà a cui è bindata quando il controllo perde il focus.

Poiché però i pulsanti posizionati nel menu non spostano il focus della pagina, vediamo cosa accade in pratica:

Step1Step2

Il motivo è semplice: poiché la TextBox che contiene il cognome non ha perso il focus, il binding non ha aggiornato la proprietà sorgente (Binding source) del ViewModel, quindi il controllo della validità dei dati immessi ritorna l’errore. Peggio ancora, poiché di fatto il valore della proprietà bindata suddetta è ancora quello vecchio, nel nostro caso abbiamo un errore perché la nostra logica di business richiede un valore non vuoto e siamo partiti da zero, ma in caso di una maschera di editing dei dati, dove magari vogliamo correggere il valore contenuto nella textbox, di fatto senza accorgerci di nulla il programma utilizzerà il VECCHIO valore e non darà errore perché tale valore non è vuoto.

Se avessimo utilizzato un bottone nella pagina e non un ApplicationBarIconButton, il focus si sarebbe spostato sul bottone stesso e il binding avrebbe completato l’aggiornamento della sorgente senza problema alcuno.

Dunque risulta assolutamente necessario, nello scenario descritto, forzare il binding in modo da aggiornare la sorgente al contenuto delle TextBox e dell’eventuali PasswordBox.

Per farlo si può utilizzare il seguente codice, da inserire nel codice associato all'evento prodotto dal pulsante:

C#:
// Force two-way binding of the editing field
object focusObj = FocusManager.GetFocusedElement();
if (focusObj != null && (focusObj is TextBox || focusObj is PasswordBox))
{
    BindingExpression binding;
    if (focusObj is TextBox)
    {
        binding = (focusObj as TextBox).GetBindingExpression(TextBox.TextProperty);
    }
    else
    {
        binding = (focusObj as PasswordBox).GetBindingExpression(PasswordBox.PasswordProperty);
    }
    binding.UpdateSource();
}

That’s all folks!

«gennaio»
domlunmarmergiovensab
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234