none
Binding dinámico sobre MVVM RRS feed

  • Pregunta

  • Hola,

    Me gustaría saber si es viable crear por ejemplo un TextBox en modo TwoWay, tal que según el usuario escriba sobre el comunique directamente con la vista sin perder el foco. 

    Esto es 

    <TextBox   Text="Binding text; Mode=TwoWay" /></TextBox>

    En este caso para que el enlace de datos llegara a la VM tendría que perder el foco. Podría hacerse que estuviera llegando según esta tecleando sobre el textbox como en ajax por ejemplo, pongo un enlace ejemplo :

    (http://www.asp.net/ajaxlibrary/AjaxControlToolkitSampleSite/autocomplete/autocomplete.aspx)

    sábado, 8 de diciembre de 2012 23:02

Respuestas

  • En Windows Phone no existe ese comportamiento que dices. Para que automáticamente se vaya llenando la propiedad con el texto que escribes hay que hacer algún pequeño truco.

    Existen dos formas. Usar un behavior o un evento. La forma del evento es muy limpia y es quizás la más sencilla de implementar.

    Lo primero es modificar tu Textbox en XAML:

    <TextBox TextChanged="OnTextBoxTextChanged"
             Text="{Binding MyText, Mode=TwoWay,
                    UpdateSourceTrigger=Explicit}" />

    Y a continuación en el evento OnTextBoxTextChanged hacemos esto:

    private void OnTextBoxTextChanged( object s, TextChangedEventArgs e )
    {
      TextBox textBox = sender as TextBox;
      BindingExpression binding = textBox.GetBindingExpression( TextBox.TextProperty );
      binding.UpdateSource();
    }

    De esta forma cada vez que el texto cambie se actualizará la propiedad de tu viewmodel automáticamente.

    Un saludo!


    MCTS - .NET 4.0 Windows Applications
    MCTS - .NET 4.0 Data Access
    MCTS - .NET 4.0 Service Communication Applications
    MCPD - .NET 4.0 Windows Developer
    Visita mi Blog en Geeks.ms
    Sigueme en Twitter

    • Marcado como respuesta Jack_sp8 domingo, 9 de diciembre de 2012 12:40
    domingo, 9 de diciembre de 2012 8:21
    Moderador