【问题标题】:Hook up the key down in TextBox (MVVM)在 TextBox (MVVM) 中连接键
【发布时间】:2013-02-12 21:56:07
【问题描述】:

在没有代码隐藏的情况下连接 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 Text={Binding SomeSource}></TextBox>

如何捕捉 TextBox 上的 keydown 事件以选择(例如)ComboBox 中的最后一个元素?我不能使用 TextBox DataSource 属性更改,因为需要挂钩用户输入。

【问题讨论】:

    标签: wpf mvvm binding triggers command


    【解决方案1】:

    如果您不介意安装 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"
    

    4.0 版 Expression SDK 的链接

    http://www.microsoft.com/en-us/download/details.aspx?id=10801

    【讨论】:

    • 此外,有很多 MVVM 框架在这方面有自己的看法,如果有的话,你正在使用吗?
    • 谢谢,我认为这是最简单的方法。
    【解决方案2】:

    如果您希望每次在文本框中按下按键时在视图模型中触发代码,您需要稍微更改绑定:

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

    【讨论】:

    • 这样它会一直在变化,即使是数据源也不是由用户以编程方式更改的!
    • 啊,我明白了,我没有从你的问题中理解这一点。是的,即使以编程方式更改值也会触发。
    • 我需要它在用户输入 smth 时触发)
    猜你喜欢
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    相关资源
    最近更新 更多