Как я могу сказать своей ViewModel, что пользователь меняет текст в TextBox? - PullRequest
3 голосов
/ 18 июня 2009

Допустим, у меня есть приложение 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}"/>

Ответы [ 2 ]

11 голосов
/ 18 июня 2009

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

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

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

1 голос
/ 18 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...