Forzare il binding di un TextBox su WP7

Scritto da  Nicolò Carandini il venerdì 3 febbraio 2012  •  Linguaggio: C#   • Livello: 100


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, un eventuale pulsante di conferma ivi posizionato fa si che ciò che l'utente ha inserito nella textbox non venga trascritto nella sorgente. Per forzare il binding si può eseguire il seguente codice, da inserire nel codice associato all'evento prodotto dal pulsante:

//Force two-way binding of the editing field
object focusObj = FocusManager.GetFocusedElement();
if (focusObj != null && focusObj is TextBox)
{
    var binding = (focusObj as TextBox).GetBindingExpression(TextBox.TextProperty);
    binding.UpdateSource();
}

 

Se poi oltre alle textbox abbiamo anche una o più PasswordBox, allora occorre estendere il codice in questo modo:

// 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();
}

 


Tags: wp7,Windows Phone 7

 
x