0

私はいくつかのリストボックスの情報を持つアプリケーションに取り組んでいます.これらはかなり多くの情報を保持できる可能性があります.

ListBox コントロールで得られるグループ化、並べ替え、およびフィルタリング機能を使用するために使用しましたが、フィルタリングが非常に遅いことがわかりました (そして、UI の応答性はアプリにとって重要です)。

したがって、私が今いる場所は、上記の方法のいずれかを使用する代わりに、次のようなものを使用して ListBoxItem の可視性を変更してフィルタリングしています。

foreach (MyItemType item in myListBox.ItemsSource)
            {
                ListBoxItem lbi = (ListBoxItem)(myListBox.ItemContainerGenerator.ContainerFromItem(item));

                if (item.Name.Contains("blah"))
                {
                    lbi.Visibility = Visibility.Visible;
                    lbi.IsEnabled = true;
                }
                else
                {
                    lbi.Visibility = Visibility.Collapsed;
                    lbi.IsEnabled = false;
                }
            }

これは、ListBox に 500 を超える項目がある場合でも非常に迅速に機能します。非表示にしたい個々のアイテムが非表示になっているにもかかわらず、すべてのグループヘッダーが表示されたままになり、それらを非表示にする方法が表示されないという問題があります。

グループを非表示にするための助け(または同じことを達成するためのより良い方法)は大歓迎です。

ありがとう

4

1 に答える 1

0

項目テンプレートとしてヘッダーと内部リストボックスを含むリストボックスを作成します。ヘッダーにはグループ名が表示され、内側のリストボックスにはグループ化されたアイテムが表示されます。これで、外側のリストボックスのアイテムを非表示にするだけで、グループ ヘッダーとそのアイテムが消えます。

于 2010-09-28T19:38:46.293 に答える