用户按下Enter键选择正确的项目组合框

时间:2016-12-19 19:06:21

标签: c# wpf mvvm combobox

我有一个带有自定义组合框的WPF,当用户键入时,它会过滤用户输入的单词(不仅仅是开头)的剩余列表。现在我想按回车键,下拉菜单中的第一项是选定项目。

以下是之前:

enter image description here

所需行为:当我从此处按Enter键时,DHC成为SelectedItem。

实际发生的事情:

enter image description here

HEI成为选定的答案,(可能是因为它是唯一以“HE”开头的节点。

为了解决这个问题,我尝试通过将其包含在xaml中来重载按键功能:

<i:Interaction.Triggers>
   <i:EventTrigger EventName="KeyDown" >
      <cmd:EventToCommand Command="{Binding KeyPress}"
         PassEventArgsToCommand="True" />
   </i:EventTrigger>
</i:Interaction.Triggers>

在代码中路由到此:

private void OnDownPress(KeyEventArgs e)
{
   var key = e.Key.ToString().ToLower();
   switch (key)
     {
        case "up":
           break;
        case "down"
           break;
        case "return":
           SelectedNode = NodeTokenList[0];
           UserInput = NodeTokenList[0].FullNodeName;
           break;
     }
 }

现在我尝试在switch语句的返回部分设置一个断点,我必须在触发开关之前按Enter键3次。即便如此,文本框也没有反映出所需的行为

1 个答案:

答案 0 :(得分:1)

您可以绑定模型中的选定项目,每次过滤器更改时,您将SelectedItem设置为已过滤列表中的第一项

  

这将是一种方式,以便我可以使用箭头按钮

导航

如果WPF组合框默认情况下不支持箭头导航,您可以使用命令绑定执行某些操作。

首先绑定__repr__属性,然后down命令只设置SelectedIndex(带边界检查ofc)

但我记得键盘导航应该包含在默认SelectedItem = filteredList[SelectedIndex + 1]