2017-01-23 189 views
0

我很努力筛选listView。我尝试了2种方法来过滤没有选中的项目。 我的问题:每当选择的项目因过滤器而消失时,它在返回时不再选择。 我的方法:WPF筛选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 { } 

这样做是它搜索的所有项目和里显示只有符合与他筛选的一个,但这种方法comepletly删除项目和重新添加它们。 我试图为选定的项目添加一个值,这会节省onSelectionChanged并在过滤器更改时使用,但它不起作用。

第二种方法是从this tutorial.我希望它会工作,因为它使用了一个过滤器,但显然它有相同的问题。

回答

0

您可以尝试设置您的ListViewItems的Visibility,具体取决于Oseba的某些属性。然后,而不是

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文件中使用一个DataTemplate该设置项的VisibilityCollapsedIsVisible设置为false。

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

+0

如何在Oseba中没有设置o.isVisible属性?我想你想设置不等于过滤器的对象为visible = false,对吧?我怎么能这样做?现在 – someone1

+0

我是,你可以控制类'Oseba'并且可以在其上定义一个属性“可见性”的假设下,我想它。 – mbger

+0

Oseba仅仅是一个数据类,其具有特性,即显示在ListView中 – someone1