Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF组合框筛选器对第一个字符WPF C#不起作用?_C#_Wpf_Visual Studio - Fatal编程技术网

WPF组合框筛选器对第一个字符WPF C#不起作用?

WPF组合框筛选器对第一个字符WPF C#不起作用?,c#,wpf,visual-studio,C#,Wpf,Visual Studio,基本上,我拥有的是一个wpf组合框,同时具有isTextSearchEnable和isEditable,enabled。我想允许用户输入他们想要查找的内容,并过滤组合框项目,以仅显示相关项目 如果用户在MP-1中输入密钥,则应仅显示包含这些文本的项目,而不显示不相关的项目。到目前为止,代码适用于第二个字符,但不适用于第一个字符。有什么想法或者我做错了什么? 到目前为止我掌握的代码 public class FilterViewModel { public

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

如果用户在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();            
        }
公共类FilterViewModel
{
公共IEnumerable数据源{get;set;}
公共过滤器模型()
{
数据源=新[]{“MP-10001”、“MP-10002”、“MP-10003”、“MP-10004”、“XD-20001”、“XD-20002”、“XD-20003”};
}
}
公共主窗口()
{
初始化组件();
FilterViewModel vm=新的FilterViewModel();
this.DataContext=vm;
}
私有void FilteredCmb\u KeyUp(对象发送方,KeyEventArgs e)
{
CollectionView cv=(CollectionView)CollectionViewSource.GetDefaultView(cmbBox.ItemsSource);
cv.Filter=((o)=>
{
if(String.IsNullOrEmpty(cmbBox.Text))返回true;
其他的
{
if(((字符串)o).Contains(cmbBox.Text))返回true;
否则返回false;
}
});
cv.Refresh();
}


isTextSearchEnable=“True”的默认行为是选择第一个部分匹配,因此您的筛选器匹配整个项目,并为所有其他条目返回false。看一看xaml,您似乎从以下问题获得了代码:

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

PM> Install-Package WPFToolkit
下面是一个很好的教程:

对于下载链接,它已从codeplex中删除,因此您可以在此处找到它:

或者xceed拥有强大的控制力:

Install-Package Extended.Wpf.Toolkit

我可以参考一下使用这个软件包的例子吗?这里有一个完整的教程:我试图通过控制台安装这个软件包,但是没有。nstall程序包:在第1行中找不到程序包“WPFToolkit”:字符:1+安装程序包WPFToolkit+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~类别信息:未指定:(:)[Install Package],异常+FullyQualifiedErrorId:NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlet.InstallPackageCommand知道我为什么会出现此错误吗?是的,我知道了,第一步是安装该软件包,我通过软件包管理器搜索找不到它,通过控制台也无法检查此链接:为什么我搜索“P”它返回多个结果?因为在这种情况下,您的过滤器工作正常。字符串包含字母P,但内置的TextSearch没有找到匹配项,因为没有任何字符串以P开头
Install-Package Extended.Wpf.Toolkit