在没有代码隐藏的情况下连接keydown事件有一点问题! 所以,我们有组合框
<ComboBox Height="20" Width="auto"
ItemsSource="{Binding AlignComboItems}"
SelectedValue="{Binding SelectedComboItem, Mode=TwoWay}"
SelectedValuePath="Key" DisplayMemberPath="Value"
SelectedItem="{Binding SelectedItem}"
x:Name="cmbBoxAlign">
</ComboBox>
和一些TextBox。
<TextBox Text={Binding SomeSource}></TextBox>
如何捕获TextBox上的keydown事件以选择(例如)ComboBox中的最后一个元素?我不能使用TextBox DataSource属性更改,因为需要挂钩用户输入。
答案 0 :(得分:3)
如果您不介意安装Expression Blend SDK,您应该可以在文本框中执行此操作
<i:Interaction.Triggers>
<i:EventTrigger EventName="KeyUp">
<i:InvokeCommandAction Command="{Binding Path=TheCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
在您的xaml
中添加对System.Windows.Interactivity
和以下命名空间的引用之后
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
链接到Expression SDK for 4.0
http://www.microsoft.com/en-us/download/details.aspx?id=10801
答案 1 :(得分:0)
如果您希望每次在文本框中按下键时视图模型中都有代码触发,则需要稍微更改绑定:
<TextBox Text="{Binding SomeSource, UpdateSourceTrigger=PropertyChanged}"
然后在视图模型中将调用setter:
private string _someSource;
public string SomeSource{
get { return _someSource; }
set {
//this will fire on key down
_someSource= value;
//based off the value you can set SelectedComboItem accordingly
OnPropertyChanged( "SomeSource" );
}
}
另外,请确保在视图模型上设置了INotifyPropertyChanged。