C# WPF筛选列表视图删除选定项

C# WPF筛选列表视图删除选定项,c#,wpf,xaml,C#,Wpf,Xaml,我正在努力过滤listView。我尝试了两种方法来筛选未删除的选定项目。 我的问题:每当选定的项目由于过滤器而消失时,它返回时将不再被选中。 我的方法: 自编代码: try { string s = isci_tb.Text; if (isci_tb.Text == "") { osebe_listView.Items.Clear();

我正在努力过滤listView。我尝试了两种方法来筛选未删除的选定项目。 我的问题:每当选定的项目由于过滤器而消失时,它返回时将不再被选中。 我的方法:

自编代码:

            try
        {

            string s = isci_tb.Text;
            if (isci_tb.Text == "")
            {
                osebe_listView.Items.Clear();
                foreach (Oseba o in seznamOseb)
                {
                    osebe_listView.Items.Add(o);
                }
            }
            else
            {
                osebe_listView.Items.Clear();
                foreach (Oseba o in seznamOseb)
                {
                    if (contejns(o.ime, s) || contejns(o.priimek, s) || contejns(o.mobilnaSt.ToString(), s) || contejns(o.posta, s) || contejns(o.nazivPodjetja, s) || contejns(o.stacionarnaSt.ToString(), s) || contejns(o.naslov, s) || contejns(o.eMail, s))
                    {
                        osebe_listView.Items.Add(o);
                    }
                }
            }
        }
        catch { }
它搜索所有项目,只显示与过滤器匹配的项目,但此方法完全删除项目并重新添加。 我尝试为所选项目添加一个值,该值保存onSelectionChanged,并在过滤器更改时使用,但它不起作用


第二种方法来自我希望它能起作用,因为它使用了一个过滤器,但实际上,它也有同样的问题。

您可以尝试根据
Oseba
的某些属性设置ListViewItems的
可见性。然后,而不是

osebe_listView.Items.Clear();
foreach (Oseba o in seznamOseb)
{
    if (someConditions)
    {
       osebe_listView.Items.Add(o);
    }
}
你可以这样写:

foreach (Oseba o in seznamOseb)
{
    if (someConditions) // when true, we want to hide the object
    {
       o.IsVisible = false;
    }
}
在.xaml文件中,使用一个数据模板,当
IsVisible
设置为false时,该模板将项目的
可见性设置为
Collapsed


另一种方法是将
IsSelected
-状态存储在对象
Oseba
中,这样当您删除对象并将其重新添加到listView时,选择状态是持久的。

如果Oseba中没有o.isVisible属性,我如何设置o.isVisible属性?我想您应该将不等于过滤器对象设置为visible=false,对吗?我怎么能这么做?我现在正在尝试,我假设您可以控制类
Oseba
,并且可以在其上定义一个属性“IsVisible”。Oseba只是一个数据类,它具有在listView中显示的属性。我向“Oseba”添加了一个IsSelected属性,该属性在osebe\u listView\u SelectionChanged方法中更改。我使用var sel=e.additems;var des=移除的项目;改变财产。现在的问题是,当项目由于筛选而被删除时,它也被设置为false。知道吗?很难说,可能有很多地方出了问题。我建议您编辑您的问题,并提供更完整的代码示例,以便我和其他人能够提供更好的建议。