用于WPF TextBox的命令,当我们按Enter键时将触发该命令

时间:2011-07-30 09:11:23

标签: c# .net wpf icommand

将WPF应用中的Button绑定到Command类中的VIEWMODEL非常容易。我想为TextBox实现类似的绑定。

我有一个TextBox我需要将它绑定到Command,当TextBox聚焦时,当我点击 Enter 时会激活它。目前,我正在为KeyUp事件使用以下处理程序,但它看起来很难看...... 我不能把它放在我的VIEWMODEL课程中。

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!");
    }
}

有更好的方法吗?

5 个答案:

答案 0 :(得分:218)

我遇到了同样的问题并找到了解决方案here,这里是代码示例:

<TextBox>
  <TextBox.InputBindings>
    <KeyBinding Command="{Binding Path=CmdSomething}" Key="Enter" />
  </TextBox.InputBindings>
</TextBox>

答案 1 :(得分:19)

雅利安,并非每个WPF对象都支持命令。因此,如果您不想这样做,您将需要从您的代码后面调用您的视图模型(稍微耦合)或使用一些MVVM消息传递实现来解耦它。有关示例,请参阅MVVM Light Messaging toolkit。或者简单地使用这样的触发器:

<TextBox>
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="KeyUp">
            <i:InvokeDataCommand Command="{Binding MyCommand}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</TextBox>

答案 2 :(得分:9)

我喜欢Sarh的回答,但除非我将Enter更改为Return,否则它在我的计划中无效:

<TextBox>
    <TextBox.InputBindings>
        <KeyBinding Key="Return" Command="{}" />
   </TextBox.InputBindings>
</TextBox>

答案 3 :(得分:1)

<TextBox Text="{Binding FieldThatIAmBindingToo, UpdateSourceTrigger=PropertyChanged}">
    <TextBox.InputBindings>
        <KeyBinding Command="{Binding AddCommand}" Key="Return" />
    </TextBox.InputBindings>
</TextBox>

我从here那里得到了答案

答案 4 :(得分:-9)

您可以将true设置为AcceptReturn属性。

 <TextBox AcceptsReturn="True" />