如何在命令wpf

时间:2019-04-07 10:54:32

标签: wpf mvvm prism keyboard-events

我正在为一个文本框而苦恼

<TextBox Name="FilterInputText" Visibility="{Binding VisibiltyAttr}" Width="500" Height="30" Text="{Binding InputText}" HorizontalAlignment="Left" Margin="5">
                    <TextBox.InputBindings>
                        <KeyBinding Command="{Binding EnterCommand}" Key="Enter" />
                        <KeyBinding Command="{Binding DownSelectionCommand}" Key="Down" />
                    </TextBox.InputBindings>
                    <i:Interaction.Triggers>
                        <i:EventTrigger EventName="KeyUp">
                            <i:InvokeCommandAction  Command="{Binding CompleteCommand}"  CommandParameter="{Binding Text, ElementName=InputText}" />
                        </i:EventTrigger>
                    </i:Interaction.Triggers>
                </TextBox> 

我在这里触发了一个事件,该事件在文本框内用“ KeyUp”事件输入。现在,我正在为自动完成文本框工作,因此我在正常工作的列表框中显示了有关输入的建议。所以我需要绑定键绑定到此文本框,以便在显示建议后,用户可以按下键并从中选择所需的选项。 对于向下键的键盘绑定它将很好地工作。

问题与事件键入有关,因为在文本框中按下任何键都会触发此事件。现在,我正在将文本框值作为命令参数发送,但我还需要发送带有comamnd参数的keyeventargs,以便我可以找出按下了哪个键,以及何时出现向下键,我将不再执行该方法。

所以我如何将textbox值和keyeventargs都作为命令参数传递,我严格遵循mvvm模式。

1 个答案:

答案 0 :(得分:0)

默认情况下,如果您未指定命令参数,则InvokeCommandAction会传递事件args。另外,您将文本框绑定到视图模型上的属性。因此,如果您按如下所示更改代码:

<TextBox Name="FilterInputText" Visibility="{Binding VisibiltyAttr}" Width="500" Height="30" Text="{Binding InputText, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Left" Margin="5">
  <TextBox.InputBindings>
       <KeyBinding Command="{Binding EnterCommand}" Key="Enter" />
       <KeyBinding Command="{Binding DownSelectionCommand}" Key="Down" />
  </TextBox.InputBindings>
  <i:Interaction.Triggers>
        <i:EventTrigger EventName="KeyUp">
            <i:InvokeCommandAction  Command="{Binding CompleteCommand}" />
        </i:EventTrigger>
   </i:Interaction.Triggers>
</TextBox> 

然后确保命令的execute方法具有参数的正确事件args类型,然后在调用CompleteCommand时,应将事件args作为参数,并且应该能够在视图上检查InputText属性。文本值的模型。

请注意,我已将“ UpdateSourceTrigger = PropertyChanged”添加到TextBox Text属性上的绑定中。这将导致用户每次键入该属性都会在视图模型中进行更新。

有关InvokeCommandAction的默认行为的信息,请参见以下链接:

https://github.com/Microsoft/XamlBehaviors/issues/126