C# WPF筛选列表视图删除选定项
我正在努力过滤listView。我尝试了两种方法来筛选未删除的选定项目。 我的问题:每当选定的项目由于过滤器而消失时,它返回时将不再被选中。 我的方法: 自编代码:C# WPF筛选列表视图删除选定项,c#,wpf,xaml,C#,Wpf,Xaml,我正在努力过滤listView。我尝试了两种方法来筛选未删除的选定项目。 我的问题:每当选定的项目由于过滤器而消失时,它返回时将不再被选中。 我的方法: 自编代码: try { string s = isci_tb.Text; if (isci_tb.Text == "") { osebe_listView.Items.Clear();
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。知道吗?很难说,可能有很多地方出了问题。我建议您编辑您的问题,并提供更完整的代码示例,以便我和其他人能够提供更好的建议。