将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!");
}
}
有更好的方法吗?
答案 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" />