У меня уже есть группа делегатов в моей модели просмотра. Я хочу реализовать событие KeyDown/KeyUp в определенном текстовом поле. То, что я хочу, в основном, когда пользователь нажал кнопку Enter
, DelegateCommand выполнит содержащиеся коды. Что мне нужно сделать для этого?Проверка нажатой кнопки ввода
ответ
так после игры, я нашел решение ..
private void TextBox_KeyDown(object sender, KeyRoutedEventArgs e)
{
if (e.Key == VirtualKey.Enter)
{
additem_button.Focus(FocusState.Pointer);
}
}
//FocusState.Pointer as if the button was clicked by the user..
Но это только работа на ПК Тхо. На мобильных телефонах он закрывает клавиатуру.
Edit 1
Похоже, я нашел другое решение, которое может быть использовано с MVVM: D
private void TextBox_KeyDown(object sender, KeyRoutedEventArgs e)
{
if (e.Key == VirtualKey.Enter)
{
additem_button.Command.Execute("");
e.Handled = true;
}
}
// button.Command.Execute("your parameter"); because on my button, the
// command has been binded to a Delegate Command inside the VM :D
Это будет работать на ПК и мобильные телефоны ..
Возможно, вы хотите проверить команду перед выполнением: 'if (additem_button.Command.CanExecute() == true) additem_button.Command.Execute();' – Fabio
@Fabio, благодарю вас за напоминание! : D – rydev
, если вы хотите, чтобы решение было более общим и более многоразовым, вы можете сделать Поведение, чтобы достичь этого. С уникальным поведением вы можете привязать любую ICommand к любому TextBox, если хотите. –
То, что вы сделали далеко? Пожалуйста, поделитесь своим кодом и покажите, в какой момент вы пытаетесь это сделать? Что вы пробовали до сих пор? – curiousBoy
Я уже нашел решение для этого: D – rydev
Почему вы просто не можете просто вызвать «ViewModel.MyCommand.Execute()» прямо в обработчике событий TextBox_KeyDown? – Fabio