【问题标题】:WPF ComboBox for slow typers用于慢速打字机的 WPF ComboBox
【发布时间】:2015-10-09 12:45:58
【问题描述】:

在我的 WPF 应用程序中,我使用了一个组合框。 当用户想要选择一个项目时,他可以输入字母,然后组合框跳到以这些字母开头的下一个条目。如果用户停止输入并在一定延迟后重新开始,则组合框假定用户已经开始输入一个新单词。嗯,这是通常的 ComboBox 行为,没什么特别的...... 问题是,我们的一些用户打字速度很慢。假设用户正在搜索一个新单词,有没有办法增加在没有组合框的情况下输入两个字母之间允许的时间? 希望你明白我的意思...

【问题讨论】:

  • 这个问题之前好像有人回答过:stackoverflow.com/questions/5973422/…
  • 你考虑过使用IsEditable="True"吗?这样组合不会自动重新启动,但您的用户只需输入他们想要过滤项目的任何文本,根据需要输入和删除。
  • 也就是说,没有内置函数可以增加那个时间? @JamesHarcourt 链接中的解决方案有一个用于过滤的文本框,虽然不是我所拥有的,但我想这将有助于找出解决问题的正确方法(不违反 mvvm 规则可能会有点困难)。
  • 如果我理解正确,@James Harcourt 提到的链接是关于自动完成搜索框行为的。这是关于最简单的默认窗口组合框的,对吧?
  • 我最好的猜测是这类似于您键入内容时的 Windows 资源管理器搜索。但在这个问题上仍然没有人知道答案:superuser.com/questions/909410/…

标签: wpf combobox


【解决方案1】:

您可以全力以赴并滚动您自己的可过滤组合框。 查看此代码,看看它是否有帮助。

XAML:

<ComboBox x:Name="myComboBox" TextBoxBase.TextChanged="myComboBox_TextChanged" DisplayMemberPath="myDisplay" IsEditable="True" StaysOpenOnEdit="True" SelectionChanged="myComboBox_SelectionChanged" />

然后,在引擎盖下:

ObservableCollection<myType> myCollection;
public ICollectionView cvs { get; set; }
public MyWindow()
{
    InitializeComponent();

    myCollection = new ObservableCollection<myType>();
    cvs = CollectionViewSource.GetDefaultView(myCollection);
    myComboBox.ItemsSource = cvs;
    cvs.Filter = FilterOut;
}

private void myComboBox_TextChanged(object sender, TextChangedEventArgs e)
{
    cvs.Refresh();
}

private bool FilterOut(object input)
{
    myType item = (myType)input;
    return ( string.IsNullOrEmpty(myComboBox.Text) || item.myDisplay.Contains(myComboBox.Text));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-25
    • 2016-06-28
    • 2016-11-06
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    相关资源
    最近更新 更多