C# 删除listview中不匹配的项

C# 删除listview中不匹配的项,c#,wpf,listview,textbox,C#,Wpf,Listview,Textbox,我有一个列表视图和一个搜索文本框。当我在文本框中键入任何字符或符号时,它会将键入的文本与列表框项目相匹配。如果有匹配项,则突出显示匹配项。在这一点上,我想从listview中删除不匹配的项。只有匹配的项将保留在listview中。你建议我怎么解决这个问题?我的其他代码如下 private void TxtSearch_PreviewKeyUp(object sender, System.Windows.Input.KeyEventArgs e) { ListControl l

我有一个列表视图和一个搜索文本框。当我在文本框中键入任何字符或符号时,它会将键入的文本与列表框项目相匹配。如果有匹配项,则突出显示匹配项。在这一点上,我想从listview中删除不匹配的项。只有匹配的项将保留在listview中。你建议我怎么解决这个问题?我的其他代码如下

 private void TxtSearch_PreviewKeyUp(object sender, System.Windows.Input.KeyEventArgs e)
 {
        ListControl lc = getactivListview();
        FindListViewItem(lc);
 }


 private void FindListViewItem(DependencyObject obj)
    {
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
        {
            ListViewItem lv = obj as ListViewItem;
            if (lv != null)
            {
                HighlightText(lv);
            }
            FindListViewItem(VisualTreeHelper.GetChild(obj as DependencyObject, i));
        }
    }

    private void HighlightText(Object itx)
    {
        if (itx != null)
        {
            if (itx is TextBlock)
            {
                Regex regex = new Regex("(" +TxtSearch.Text + ")", RegexOptions.IgnoreCase);
                TextBlock tb = itx as TextBlock;
                if (TxtSearch.Text.Length == 0)
                {
                    string str = tb.Text;
                    tb.Inlines.Clear();
                    tb.Inlines.Add(str);
                    return;
                }
                string[] substrings = regex.Split(tb.Text);
                tb.Inlines.Clear();
                foreach (var item in substrings)
                {
                    if (regex.Match(item).Success)
                    {
                        Run runx = new Run(item);
                        runx.Background = Brushes.Lime;
                        tb.Inlines.Add(runx);

                        if (tb.IsMouseOver)
                        {
                            tb.IsEnabled = false;
                        }
                    }
                    else
                    {
                        tb.Inlines.Add(item);
                        tb.IsEnabled = false;
                    }
                }

                return;
            }
            else
            {
                for (int i = 0; i < VisualTreeHelper.GetChildrenCount(itx as DependencyObject); i++)
                {
                    HighlightText(VisualTreeHelper.GetChild(itx as DependencyObject, i));
                }
            }
        }
    }
private void TxtSearch\u PreviewKeyUp(对象发送方,System.Windows.Input.KeyEventArgs e)
{
ListControl lc=getactivListview();
FindListViewItem(lc);
}
私有void FindListViewItem(DependencyObject对象)
{
for(int i=0;i
嗯,
WPF
中最简单、最自然的方法是使用数据绑定和过滤
ModelView
集合

例如:

public class ModelView 
{
    private IEnumerable<Data> _data = ....
    public string Filtrer {get;set;}

    public IEnumerable<Data> GetData() {

          return FilteredData();
    }

    private IEnumerable<Data> FilteredData()
   {
      if(string.IsNullOrEmpty(Filter))
         return _data;

      return   _data.Where(x=>x...Filter); //SOME CONDITON EXECUTION
   }
}
公共类模型视图
{
私有IEnumerable_数据=。。。。
公共字符串筛选器{get;set;}
公共IEnumerable GetData(){
返回FilteredData();
}
私有IEnumerable筛选器数据()
{
if(string.IsNullOrEmpty(筛选器))
返回数据;
返回_data.Where(x=>x…Filter);//执行的某些条件
}
}
您绑定到view
GetData()
,该视图根据筛选字符串的存在或不存在返回完整或筛选的集合

例如,如何在
ListView
上实现数据绑定(这不是一个简单的主题,很难在这个简单的答案中解释),可以看看: