【问题标题】:WPF Combo box filter not working on the first character WPF C#?WPF组合框过滤器不适用于第一个字符WPF C#?
【发布时间】:2021-05-31 10:50:51
【问题描述】:

基本上我拥有的是一个 wpf 组合框,它同时启用了 isTextSearchEnable 和 isEditable。我想允许使用键入他们想要查找的内容并过滤组合框项目以仅显示相关项目。

如果用户在 MP-1 中键入,它应该只显示包含这些文本的项目,而不显示不相关的项目。到目前为止,该代码适用于第二个字符,但不适用于第一个字符。任何想法或我在这里做错了什么?

到目前为止我的代码,

public class FilterViewModel
        {
            public IEnumerable<string> DataSource { get; set; }

            public FilterViewModel()
            {
                DataSource = new[] { "MP-10001", "MP-10002", "MP-10003", "MP-10004", "XD-20001", "XD-20002", "XD-20003" };
            }
        }

        public MainWindow()
        {
            InitializeComponent();

            FilterViewModel vm = new FilterViewModel();
            this.DataContext = vm;
        }


        private void FilteredCmb_KeyUp(object sender, KeyEventArgs e)
        {
            CollectionView cv = (CollectionView)CollectionViewSource.GetDefaultView(cmbBox.ItemsSource);
            
            cv.Filter = ((o) =>
            {
                if (String.IsNullOrEmpty(cmbBox.Text)) return true;
                else
                {
                    if (((string)o).Contains(cmbBox.Text)) return true;
                    else return false;
                }
            });

            cv.Refresh();            
        }
<Grid>
        <ComboBox x:Name="cmbBox" HorizontalAlignment="Left" Margin="78,36,0,0" VerticalAlignment="Top" Width="362" IsEditable="True" IsTextSearchEnabled="True" Height="47" KeyUp="FilteredCmb_KeyUp" StaysOpenOnEdit="True" IsDropDownOpen="True" ItemsSource="{Binding DataSource}"/>

    </Grid>

【问题讨论】:

    标签: c# wpf visual-studio


    【解决方案1】:

    您可以使用 AutoCompleteBox,包含搜索和过滤高级功能的漂亮控件,安装此包:

    PM> Install-Package WPFToolkit
    

    这是一个很好的教程:https://www.broculos.net/2014/04/wpf-autocompletebox-autocomplete-text.html

    对于它从 codeplex 中删除的下载链接,您可以在这里找到它:https://github.com/dotnetprojects/WpfToolkit

    或者 xceed 有很好的控制权:

    Install-Package Extended.Wpf.Toolkit
    

    【讨论】:

    • 有没有使用这个包的例子可以参考一下?
    • 我尝试通过控制台安装软件包,但不能。 nstall-Package : Unable to find package 'WPFToolkit' At line:1 char:1 + Install-Package WPFToolkit + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [Install-Package], Exception + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand 知道为什么会出现此错误吗?
    • 是的,我做了,第一步是安装包,我通过包管理器搜索找不到,通过控制台也找不到
    【解决方案2】:

    isTextSearchEnable="True" 的默认行为是选择第一个部分匹配项,因此您的过滤器匹配整个项目并为所有其他条目返回 false。查看有关您似乎从以下位置获得该代码的问题的 xaml:Simple WPF combobox filter

    【讨论】:

    • 为什么我搜索“P”会返回多个结果?
    • 因为在这种情况下,您的过滤器按预期工作。字符串包含字母 P 但内置 TextSearch 没有找到匹配项,因为没有字符串以 P 开头
    猜你喜欢
    • 2020-01-17
    • 2020-05-18
    • 2020-04-01
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    相关资源
    最近更新 更多