问题
It is very easy to bind Button
s in WPF apps to Command
s in a VIEWMODEL
class. I'd like to achieve a similar binding for a TextBox
.
I have a TextBox
and I need to bind it to a Command
that fires up when I hit Enter while the TextBox
is focused. Currently, I'm using the following handler for the KeyUp
event, but it looks ugly...
and I can't put it in my VIEWMODEL
class.
private void TextBox_KeyUp(object sender, KeyEventArgs e)
{
if (e.Key == System.Windows.Input.Key.Enter)
{
// your event handler here
e.Handled = true;
MessageBox.Show("Enter Key is pressed!");
}
}
Is there a better way to do this?
回答1:
Aryan, not every WPF object supports commanding. So if you wan't to do that you'll need either to call your view model from your code behind (a little coupled) or use some MVVM Messaging implementation to decouple that. See MVVM Light Messaging toolkit for an example. Or simple use triggers like this:
<TextBox>
<i:Interaction.Triggers>
<i:EventTrigger EventName="KeyUp">
<i:InvokeDataCommand Command="{Binding MyCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBox>
回答2:
I've faced with the same problem and found solution here, here is the code sample:
<TextBox>
<TextBox.InputBindings>
<KeyBinding Command="{Binding Path=CmdSomething}" Key="Enter" />
</TextBox.InputBindings>
</TextBox>
回答3:
I like Sarh's answer, but it wouldn't work in my program, unless I changed Enter
to Return
:
<TextBox>
<TextBox.InputBindings>
<KeyBinding Key="Return" Command="{}" />
</TextBox.InputBindings>
</TextBox>
回答4:
You can set true to AcceptReturn property.
<TextBox AcceptsReturn="True" />
来源:https://stackoverflow.com/questions/6882196/command-for-wpf-textbox-that-fires-up-when-we-hit-enter-key