WPF: скрыть группы ListBox, когда все содержимое скрыто

Я работаю над приложением, в котором есть несколько информационных списков ListBox, возможно, они могут содержать довольно много информации (возможно, до 6 или 700 сложных элементов - несколько текстовых полей и изображений).

Я использовал элемент управления ListBox, чтобы использовать функции группировки, сортировки и фильтрации, которые вы получаете с ним, но оказалось, что фильтрация очень медленная (и отзывчивость пользовательского интерфейса важна для приложения).

Итак, где я сейчас, вместо того, чтобы использовать любой из вышеперечисленных методов, я фильтрую, изменяя видимость 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;
                }
            }

Это работает очень быстро даже с более чем 500 элементами в ListBox. Теперь у меня проблема: хотя отдельные элементы, которые я хочу скрыть, теперь скрыты, это оставляет все заголовки групп видимыми, и я не вижу никакого способа скрыть их от просмотра.

Любая помощь в сокрытии групп (или даже лучший способ добиться того же) приветствуется.

Спасибо


person Andy    schedule 28.09.2010    source источник


Ответы (1)


Создайте список, который содержит в качестве шаблона элемента заголовок и внутренний список. В заголовке отображается имя группы, а во внутреннем списке — сгруппированные элементы. Теперь все, что вам нужно сделать, это скрыть элемент во внешнем списке, и заголовок группы и его элементы исчезнут.

person Wallstreet Programmer    schedule 28.09.2010