Como posso dizer ao meu ViewModel que o usuário está mudando de texto na caixa de texto?

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

  •  06-07-2019
  •  | 
  •  

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}"/>
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top