Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.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
C# 过滤xaml列表框_C#_Xaml_Filter_Listbox_Collectionviewsource - Fatal编程技术网

C# 过滤xaml列表框

C# 过滤xaml列表框,c#,xaml,filter,listbox,collectionviewsource,C#,Xaml,Filter,Listbox,Collectionviewsource,嗨,我有一个带有一些客户姓名的列表框,我想根据文本框中输入的文本过滤列表。经过一点研究,我听说我们可以使用CollectionViewSourse和ICollectionView,但没有一个阶段可以让它工作 请你就如何实现这一目标提出建议 非常感谢你的帮助 XAML 尝试获取集合的默认集合视图。每次txtSearch更改时,都必须更改过滤器 ICollectionView view = CollectionViewSource.GetDefaultView(customerList); vie

嗨,我有一个带有一些客户姓名的列表框,我想根据文本框中输入的文本过滤列表。经过一点研究,我听说我们可以使用CollectionViewSourse和ICollectionView,但没有一个阶段可以让它工作

请你就如何实现这一目标提出建议

非常感谢你的帮助

XAML


尝试获取集合的默认集合视图。每次txtSearch更改时,都必须更改过滤器

ICollectionView view = CollectionViewSource.GetDefaultView(customerList);

view.Filter = obj =>
{
    string item = obj as string;
    return (item.ToLower().Contains(YourFilter));
};

我建议您阅读有关数据绑定的内容,以及如何使用数据绑定来绑定列表框和文本框,以及如何管理viewmodels中的集合

但要解决你现在的问题

与customerList一样,在全局级别定义IcollectionView,并在主视图中将代码更改为

CollectionViewSource collectionViewSource = new CollectionViewSource();
            collectionViewSource.Source = customerList;
            collectionView = collectionViewSource.View;
            collectionView.Filter = collectionFilter;
            lbCustomers.ItemsSource = collectionView;
并添加这两个附加方法

private bool collectionFilter(object obj)
        {
            if (string.IsNullOrWhiteSpace(txtSearch.Text))
                return true;
            string name = obj.ToString();
            return name.Contains(txtSearch.Text);
        }


        private void TxtSearch_OnTextChanged(object sender, TextChangedEventArgs e)
        {
            collectionView.Refresh();
        }
将文本框更改为

<TextBox x:Name="txtSearch" TextChanged="TxtSearch_OnTextChanged"/>

这些应该是不言自明的变化,但如果你需要任何帮助,我很乐意解释


filter方法用于定义筛选显示的列表框项目的逻辑

Hi感谢您的回复。我总是收到这样的消息“CollectionViewSource不包含getdefaultview的定义”,视图也是如此。FIlter@Rao你在用SilverLight吗?它没有GetDefaultView。检查这个答案,据我所知,我没有使用Silverlight。我确实查看了您发送的链接,并克服了“getdefaultview”错误。但是我仍然需要使用collectionView.Filter,但仍然会出现错误'CollectionViewSource不包含筛选器的定义。我不知道如何克服这个问题我想我确实需要帮助,因为我在“collectionView.Filter=collectionFilter;”中遇到了这个错误错误:IcollectionView不包含“筛选器”的定义。甚至collectionView.Refresh也有错误:IcollectionView不包含“Refresh”的定义
CollectionViewSource collectionViewSource = new CollectionViewSource();
            collectionViewSource.Source = customerList;
            collectionView = collectionViewSource.View;
            collectionView.Filter = collectionFilter;
            lbCustomers.ItemsSource = collectionView;
private bool collectionFilter(object obj)
        {
            if (string.IsNullOrWhiteSpace(txtSearch.Text))
                return true;
            string name = obj.ToString();
            return name.Contains(txtSearch.Text);
        }


        private void TxtSearch_OnTextChanged(object sender, TextChangedEventArgs e)
        {
            collectionView.Refresh();
        }
<TextBox x:Name="txtSearch" TextChanged="TxtSearch_OnTextChanged"/>