Это было бы не лучше, чем подключиться к событию KeyUp или KeyPress текстового поля, и в обработчике события вызвать команду, если e.Key == ENTER. Итак, для этого потребуется тесная связь, которой командование должно избежать ... и я просил решение в XAML; проверка ключа в ViewModel просто добавляет другой слой для обработки события с кодом, который можно легко сделать в представлении (а не в модели представления). Кроме того, такая обработка событий в любом случае не должна происходить в модели представления =)
у вызвать команду, когда ENTER нажата вTextBox
, Рассмотрим следующий XAML:
<UserControl
...
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
...>
...
<TextBox>
<i:Interaction.Triggers>
<i:EventTrigger EventName="KeyUp">
<i:InvokeCommandAction Command="{Binding MyCommand}"
CommandParameter="{Binding Text}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBox>
...
</UserControl>
и что MyCommand выглядит следующим образом:
public ICommand MyCommand {
get { return new DelegateCommand<string>(MyCommandExecute); }
}
private void MyCommandExecute(string s) { ... }
С учетом вышеизложенного моя команда вызывается при каждом нажатии клавиши. Как я могу ограничить команду только для вызова при нажатии клавиши ВВОД?
Я понимаю, что с помощью Expression Blend я могу использовать условия, но, похоже, они ограничены элементами и не могут учитывать аргументы события.
Я тоже сталкивалсяSlex который предлагает свойInvokeCommandAction
реализация, которая построена на вершинеSystems.Windows.Interactivity
реализация и может делать то, что мне нужно. Еще одно соображение - написать собственный триггер, но я надеюсь, что есть способ сделать это без использования внешних наборов инструментов.