Come posso dire al mio ViewModel che l'utente sta modificando il testo nella TextBox?

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

  •  06-07-2019
  •  | 
  •  

Domanda

Quindi diciamo che ho un'applicazione MVVM e voglio che l'utente compili un TextBox e mentre lo sta compilando , Voglio verificare se ha già digitato il cognome di un cliente.

Ecco come faccio a sapere il mio ViewModel quando l'utente ha modificato l'elemento in ComboBox :

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

Ed ecco come faccio a sapere il mio ViewModel quando l'utente ha spostato il dispositivo di scorrimento :

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

Ed ecco come ottengo il mio ViewModel sapere quando l'utente ha modificato il testo nella TextBox e spostato lo stato attivo dalla TextBox:

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

Ma come faccio a sapere che ViewModel sa quando l'utente ha modificato il testo nella TextBox mentre digita , ad es. qualcosa del genere:

PSEUDO-CODE (causa errore poiché TextChanged è un evento):

<TextBox
    Width="200"
    TextChanged="{Binding CurrentTextInTextBox}"/>
È stato utile?

Soluzione

Se lo desideri, invece di aggiornare ViewModel solo quando TextBox ha perso lo stato attivo, puoi impostarlo per l'aggiornamento durante la digitazione. Il UpdateSourceTrigger sulla proprietà di associazione del testo of TextBox è impostato su LostFocus per impostazione predefinita anziché su PropertyChanged come la maggior parte degli altri controlli, tuttavia è possibile impostarlo in modo esplicito nell'associazione. In questo modo, la proprietà TypedCustomerName nella VM o M verrà aggiornata man mano che viene modificata nell'interfaccia utente.

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

Se non è quello che stai cercando, puoi anche utilizzare AttachedCommandBehaviors per associare l'evento indirizzato TextChanged a un comando IC esistente nel modello di visualizzazione.

Altri suggerimenti

L'impostazione predefinita di TextBoxex è l'aggiornamento su LostFocus. Imposta UpdateSourceTrigger = " PropertyChanged " per aggiornare mentre l'utente sta digitando.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top