Como posso dizer ao meu ViewModel que o usuário está mudando de texto na caixa de texto?
Pergunta
Então, digamos que eu tenho um MVVM aplicativo e eu quero que o usuário preencher um TextBox e enquanto ele é preenchê-lo , quero verificar para ver se ele tem digitado no último nome de um cliente ainda.
Aqui está como eu recebo o meu ViewModel para saber quando o usuário tem mudou o item na caixa de combinação :
<ComboBox
ItemsSource="{Binding Customers}"
ItemTemplate="{StaticResource CustomerComboBoxTemplate}"
Margin="20"
HorizontalAlignment="Left"
SelectedItem="{Binding SelectedCustomer, Mode=TwoWay}"/>
E aqui está como eu recebo o meu ViewModel para saber quando o usuário tem moveu o Slider :
<Slider Minimum="0"
Margin="10"
Width="400"
IsSnapToTickEnabled="True"
Maximum="{Binding HighestCustomerIndex, Mode=TwoWay}"
Value="{Binding SelectedCustomerIndex, Mode=TwoWay}"/>
E aqui está como eu recebo o meu ViewModel para saber quando o usuário tem Texto alterado na caixa de texto e mudou o foco na caixa de texto:
<TextBox
Width="200"
Text="{Binding TypedCustomerName}"/>
Mas como faço para que meu ViewModel para saber quando o usuário tem Texto alterado no TextBox quando tipos , por exemplo, algo como isto:
pseudo-código (causa erro desde TextChanged é um evento):
<TextBox
Width="200"
TextChanged="{Binding CurrentTextInTextBox}"/>
Solução
Se você gosta, em vez de apenas atualizar o ViewModel quando o TextBox tem o foco perdido, você pode configurá-lo para atualizar enquanto digitam. A UpdateSourceTrigger sobre a propriedade de ligação do texto de um TextBox está definido para LostFocus por padrão, em vez de PropertyChanged como a maioria dos outros controles, mas você pode configurá-lo explicitamente na ligação. Ao fazer isso, a propriedade TypedCustomerName na VM ou M irá atualizar como ele é alterado na interface do usuário.
<TextBox
Width="200"
Text="{Binding TypedCustomerName, UpdateSourceTrigger=PropertyChanged}"/>
Se não é isso que você está procurando, você também pode usar AttachedCommandBehaviors para vincular a TextChanged evento roteado para um ICommand que existe em seu Model View.
Outras dicas
TextBoxex padrão é atualização em LostFocus. Set UpdateSourceTrigger = "PropertyChanged" a atualização como usuário está digitando.