0

次の問題に出くわしました: ListView の項目をリアルタイムでフィルター処理するための回答を使用して、LargeIcon ビューでフィルター処理された項目のリストを作成しています。リストビューのグループを定義します。

//  Define the Groups within the listview.                
foreach (CategoryObject category in JManager.jfo.categories)
{
   ListViewGroup lvg = new ListViewGroup();
   lvg.Header = lvg.Name = category.name;
   channellistView.Groups.Add(lvg);
}

次のコードを使用して、リストビューとマスター リストに項目を繰り返し追加します。

            lvi.Group = channellistView.Groups[CategoryName];
            lvi.Tag = Obj;
            channellistView.Items.Add(lvi);

            ListViewItem mlvi = lvi.Clone() as ListViewItem;
            mlvi.Group = channellistView.Groups[CategoryName];
            masterChannelList.Add(mlvi);

これは、「フィルター」テキストボックスに文字を入力したときにフィルタリングを処理するコードです。

channellistView.BeginUpdate();

channellistView.Items.Clear();
// This filters and adds your filtered items to listView
foreach (ListViewItem item in masterChannelList.Where(lvi => 
         lvi.Text.ToLower().StartsWith(searchmetroTextBox.Text.ToLower().Trim())))
            {
                channellistView.Items.Add(item);
            }

channellistView.EndUpdate();

この問題は、文字列の 2 番目の文字を入力した後に発生します。次の行が表示されます。

channellistView.Items.Clear();

何らかの方法でマスター リストの Groups コレクションを変更します。これは、上の行にブレークポイントを設定し、特定のアイテムのマスター リスト グループを表示しているためです。上記の行を実行した後、アイテムのグループは null に設定されます。その結果、グループが無効化されたアイテムを含む「デフォルト」グループがリストに表示されます。

問題の行が Group コレクションを変更するべきではないことを私は理解しています。

4

1 に答える 1