按下Enter键时从文本框中触发命令?

时间:2013-10-22 08:32:56

标签: c# wpf mvvm textbox multibinding

首先让我说我是MVVM的新手,所以如果问题不清楚,请告诉我,我会尽力澄清。

我已使用buttonXAML中正确实施了multibinding,代码如下:

<Button x:Name="licenceFilterSet" Content="Search License" Command="{Binding licenseSearchCommand}" Click="licenceFilterButtonClick" HorizontalAlignment="Right" Width="94">
    <Button.Resources>
        <local:SearchFilterConverter x:Key="SearchFilterConverter" />
    </Button.Resources>
    <Button.CommandParameter>
        <MultiBinding Converter="{StaticResource SearchFilterConverter}">
            <Binding Path="Text" ElementName="filterLicenseTextBox" />
            <Binding Path="IsChecked" ElementName="regularExpressionCheckBox" />
        </MultiBinding>
    </Button.CommandParameter>
</Button>

(发送文本框的值和复选框以继续)。

现在我想在textBox中添加完全相同的功能,用户可以在ENTER中直接按textBox并执行相同的操作。

我尝试了以下代码,但似乎现在每个字符都被发送到命令,但我只希望在用户按下ENTER时发送命令。我应该改变什么?

<TextBox Name="filterLicenseTextBox">
        <TextBox.Resources>
            <local:SearchFilterConverter x:Key="SearchFilterConverter" />
        </TextBox.Resources>

        <TextBox.Text>
            <MultiBinding Converter="{StaticResource SearchFilterConverter}">
                <Binding Path="Text" ElementName="filterLicenseTextBox" Mode="OneWay"/>
                <Binding Path="IsChecked" ElementName="regularExpressionCheckBox" Mode="OneWay"/>
            </MultiBinding>
        </TextBox.Text>
        <TextBox.InputBindings>
            <KeyBinding Key="Enter" Command="{Binding licenseSearchCommand}">
            </KeyBinding>
        </TextBox.InputBindings>
</TextBox>

1 个答案:

答案 0 :(得分:3)

简短的回答是:

使用按钮上的IsDefault

<Button IsDefault="true" 
   Click= "licenceFilterButtonClick"
   Content="Search License" ... />  

现在Enter键绑定到此按钮单击,如果您使用按钮在窗口中的任何位置点击Enter,它将起作用。

(位)长答案是:

看看this article,它解释了原因(创建默认按钮),一旦你理解了它们的工作方式,你也可以使用取消:)