как использовать триггеры событий в mvvm wpf

#c# #wpf #mvvm

#c# #wpf #mvvm

Вопрос:

я хотел бы поднять значение нажатия клавиши события, когда я что-то набираю в своем текстовом поле, мои команды будут просто подсчитывать, сколько времени потребовалось для ввода

это мой xaml с текстовым полем :

 <TextBlock Grid.Row="0" Grid.Column="0" Text="{Binding Texts.mydata,UpdateSourceTrigger=PropertyChanged}" FontWeight="SemiBold">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="KeyDown">
            <cmd:EventToCommand Command="{Binding LigneAddCommand}" PassEventArgsToCommand="True" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</TextBlock>
  

на мой взгляд, модель
вот моя команда RelayCommand:

 private RelayCommand _ligneAddCommand;
public RelayCommand LigneAddCommand => _ligneAddCommand = _ligneAddCommand ?? new RelayCommand(LigneAddKeyDownEventHandle, LignaAddCanBeExecuted);

protected virtual bool LignaAddCanBeExecuted() => true;

protected virtual void LigneAddKeyDownEventHandle()
{
    if (timer != null)
        timer.Stop();

    timer = new System.Windows.Threading.DispatcherTimer();
    timer.Tick  = (s, args) =>
    {
        //fetch data here...
        timer.Stop();
    };
    timer.Interval = TimeSpan.FromMilliseconds(50);
    timer.Start();
}
  

моя проблема, когда я помещаю свою точку останова в свою viewmodel, кажется, что мое событие никогда не возникает

Комментарии:

1. Регистрируются ли какие-либо ошибки привязки в Output окне?

2. Как построена фактическая команда. LigneAddKeyDownEventHandle не используется в том, что мы видим.

3. Почему вы опубликовали разметку TextBlock ? И как это LigneAddCommand определяется и что такое DataContext из TextBox ?

4. @prestasoc я добавил всю команду

5. Попробуйте <i:InvokeCommandAction Command=.. CommandParamater=.. вместо <cmd:EventToCommand . Или установите PassEventArgsToCommand значение false, поскольку вы не передаете аргументы команде.