Как я могу сказать своей ViewModel, что пользователь меняет текст в TextBox?

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

  •  06-07-2019
  •  | 
  •  

Вопрос

Допустим, у меня есть приложение MVVM , и я хочу, чтобы пользователь заполнил TextBox и во время его заполнения , Я хочу проверить, не набрал ли он фамилию клиента.

Вот как я узнаю, что моя ViewModel изменила элемент в ComboBox .

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

И вот как я узнаю, что моя ViewModel знает, когда пользователь переместил ползунок :

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

И вот как я узнаю, что моя ViewModel узнала, когда пользователь изменил текст в TextBox и переместил фокус из TextBox:

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

Но как я узнаю, что моя ViewModel знает, когда пользователь изменил текст в TextBox при вводе , например как то так:

PSEUDO-CODE (вызывает ошибку, поскольку TextChanged является событием):

<TextBox
    Width="200"
    TextChanged="{Binding CurrentTextInTextBox}"/>
Это было полезно?

Решение

Если хотите, вместо обновления только ViewModel, когда TextBox потерял фокус, вы можете настроить его на обновление по мере их ввода. UpdateSourceTrigger свойства привязки текста TextBox по умолчанию имеет значение LostFocus вместо PropertyChanged, как и большинство других элементов управления, однако вы можете установить его явно в привязке. При этом свойство TypedCustomerName в ВМ или М будет обновляться по мере изменения в пользовательском интерфейсе.

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

Если это не то, что вы ищете, вы также можете использовать AttachedCommandBehaviors , чтобы связать перенаправленное событие TextChanged с ICommand, существующим в вашей модели представления.

Другие советы

TextBoxex по умолчанию обновляется на LostFocus. Установите UpdateSourceTrigger = " PropertyChanged " обновить, когда пользователь печатает.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top