在我的WPF视图中,我尝试将事件绑定到Enter键,如下所示:
<TextBox Width="240" VerticalAlignment="Center" Margin="2" Text="{Binding SearchCriteria, Mode=OneWayToSource}">
<TextBox.InputBindings>
<KeyBinding Key="Enter" Command="{Binding EnterKeyCommand}"/>
<KeyBinding Key="Tab" Command="{Binding TabKeyCommand}"/>
</TextBox.InputBindings>
</TextBox>
此代码有效,当用户按下Enter键时,我的EnterKeyCommand将触发。但问题是,当事件触发时,WPF尚未将文本框中的文本绑定到“SearchCriteria”。因此,当我的事件触发时,“SearchCriteria”的内容为空。我可以在此代码中进行简单的更改,以便在我的EnterKey命令触发时可以获取文本框的内容吗?
答案 0 :(得分:67)
您需要将UpdateSourceTrigger
绑定的TextBox.Text
更改为PropertyChanged
。请参阅here。
答案 1 :(得分:10)
您可以将TextBox的InputBindings
属性作为CommandParameter
传递给Command
:
<TextBox x:Name="MyTextBox">
<TextBox.InputBindings>
<KeyBinding Key="Return"
Command="{Binding MyCommand}"
CommandParameter="{Binding ElementName=MyTextBox, Path=Text}"/>
</TextBox.InputBindings>
</TextBox>
答案 2 :(得分:7)
答案 3 :(得分:4)
我知道这已经有6年了,但是没有一个答案能够完整地使用XAML产生正确答案而且没有代码隐藏。我还有一些工作要做。作为参考,该方法如下。首先是XAML
<TextBox Text="{Binding SearchText, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}">
<TextBox.InputBindings>
<KeyBinding Key="Enter" Command="{Binding SearchEnterHit}"/>
<KeyBinding Key="Return" Command="{Binding SearchEnterHit}"/>
</TextBox.InputBindings>
</TextBox>
基本上,方法是在每次击键时将每个键都放到绑定的 SearchText 上。因此,一旦按下return / enter,字符串将完全出现在SearchText中。因此,在 SearchEnterHit 命令中,TextBox中的整个字符串都可以通过SearchText属性获得。
如上所述,UpdateSourceTrigger = PropertyChanged是每次击键 SearchText 属性的内容。 KeyBindings捕获回车键。
这实际上是最简单的方法,没有代码隐藏和所有XAML。当然,您经常将密钥刷新到SearchText属性,但这通常不是问题。