在TextBox(MVVM)中连接键

时间:2013-02-12 21:56:08

标签: wpf mvvm binding triggers command

在没有代码隐藏的情况下连接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属性更改,因为需要挂钩用户输入。

2 个答案:

答案 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。