¿Cómo puedo decirle a mi ViewModel que el usuario está cambiando el texto en TextBox?

StackOverflow https://stackoverflow.com/questions/1013208

  •  06-07-2019
  •  | 
  •  

Pregunta

Entonces, supongamos que tengo una aplicación MVVM y quiero que el usuario complete un TextBox y mientras lo completa , Quiero comprobar si ya ha escrito el apellido de un cliente.

Así es como hago saber mi ViewModel cuando el usuario ha cambiado el elemento en el ComboBox :

<ComboBox 
    ItemsSource="{Binding Customers}"
    ItemTemplate="{StaticResource CustomerComboBoxTemplate}"
    Margin="20"
    HorizontalAlignment="Left"
    SelectedItem="{Binding SelectedCustomer, Mode=TwoWay}"/>

Y así es como hago saber mi ViewModel cuando el usuario ha movido el Control deslizante :

<Slider Minimum="0" 
        Margin="10"
        Width="400"
        IsSnapToTickEnabled="True"
        Maximum="{Binding HighestCustomerIndex, Mode=TwoWay}" 
        Value="{Binding SelectedCustomerIndex, Mode=TwoWay}"/>

Y así es como hago que mi ViewModel sepa cuando el usuario ha cambiado el texto en TextBox y ha alejado el foco del TextBox:

<TextBox
    Width="200"
    Text="{Binding TypedCustomerName}"/>

Pero, ¿cómo hago para que mi ViewModel sepa cuándo el usuario ha cambiado el texto en TextBox mientras escribe , p. algo como esto:

PSEUDO-CODE (causa un error ya que TextChanged es un evento):

<TextBox
    Width="200"
    TextChanged="{Binding CurrentTextInTextBox}"/>
¿Fue útil?

Solución

Si lo desea, en lugar de solo actualizar ViewModel cuando TextBox ha perdido el foco, puede configurarlo para que se actualice a medida que escribe. El UpdateSourceTrigger en la propiedad de enlace de texto de un TextBox se establece en LostFocus de forma predeterminada en lugar de PropertyChanged como la mayoría de los otros controles, sin embargo, puede configurarlo explícitamente en el enlace. Al hacerlo, la propiedad TypedCustomerName en la VM o M se actualizará a medida que se modifique en la IU.

<TextBox
Width="200"
Text="{Binding TypedCustomerName, UpdateSourceTrigger=PropertyChanged}"/>

Si eso no es lo que está buscando, también puede usar AttachedCommandBehaviors para vincular el evento enrutado TextChanged a un ICommand que existe en su Modelo de vista.

Otros consejos

TextBoxex predeterminado es actualizar en LostFocus. Establecer UpdateSourceTrigger = " PropertyChanged " actualizar a medida que el usuario escribe.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top