2017-01-23 19 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 { } 

これが何をするか、それはすべての項目とdisplayes彼はフィルタと一致しますが、この方法はcomepletly項目を削除し、それらを再追加のみを検索します。 選択した項目の値を追加しようとしました。これはonSelectionChangedを保存​​し、フィルタが変更されたときに使用されますが、機能しませんでした。

2番目の方法はthis tutorial.でした。フィルタを使用していても動作することを期待していましたが、明らかに同じ問題があります。

答えて

0

Osebaのプロパティによっては、ListViewItemのVisibilityを設定できます。その後、代わりに

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を使用して、アイテムのVisibilityIsVisibleがfalseに設定されている場合Collapsedします。

もう1つの方法は、オブジェクトOsebaの中にIsSelectedステートを格納することです。オブジェクトを削除してlistViewに再追加すると、選択状態は永続的になります。

+0

Osebaにo.isVisibleプロパティが設定されていない場合、どうすれば設定できますか?あなたはnot-equal-to-filterオブジェクトをvisible = falseに設定したいと思いますよね?どうすればいい?私は今それをしようとしています – someone1

+0

私はあなたがクラス 'Oseba'を支配し、それにプロパティ" IsVisible "を定義できるという仮定の下にいました。 – mbger

+0

Osebaは、プロパティを持ち、ListViewに表示されるデータクラスのみです – someone1

関連する問題