2017-01-23 249 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