Я пытаюсь дополнительно настроить встроенную возможность WPF ListBox для отображения элементов в группах.
Короче говоря, я хочу скрыть контейнер группы (и заголовок группы в целом), если все элементы внутри группысвернуто (Visibility
свойство).
Во-первых, у меня есть очень простой класс City, который представляет один элемент.К этому классу относится Shown
свойство.Внутри ItemContainerStyle
у меня просто есть DataTrigger
, который устанавливает Visibility
в Collapsed
, если значение этого свойства False
.
class City : INotifyPropertyChanged
{
private bool m_Shown = true;
public string Name { get; set; }
public string Country { get; set; }
public bool Shown
{
get
{
return m_Shown;
}
set
{
m_Shown = value;
PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Shown"));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
. Так я добавляю примеры городов, добавляю описание группы ивсе работают нормально.
m_cities = new List<City>
{
new City() { Name = "Berlin", Country = "Germany" },
new City() { Name = "Milano", Country = "Italy" },
new City() { Name = "Frankfurt", Country = "Germany" },
new City() { Name = "Rome", Country = "Italy" }
};
ICollectionView view = CollectionViewSource.GetDefaultView(m_cities);
view.GroupDescriptions.Add(new PropertyGroupDescription("Country"));
Cities = view; // <-- Binds to ItemsSource of ListBox
Я пытался несколькими способами автоматически скрыть группу, если в ней больше нет видимых элементов (все они свернуты), но все без удачи.
В одну сторонусостоит в том, чтобы повторить последние 3 строки в приведенном выше коде, и это работает, но я заметил замедление с этим методом, и список должен работать быстро для пользователя.
Сильфон - один из моих примеров, и это на самом деле работает для сокрытия, но я могуПосле этого группа больше не будет видна.Я пытался с конвертерами и подобным, но я не могу снова видеть группу .
<ListBox.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Style.Triggers>
<Trigger Property="ActualHeight" Value="20">
<Setter Property="Visibility" Value="Collapsed"/>
</Trigger>
</Style.Triggers>
<Setter Property="Visibility" Value="Visible"/>
<Setter Property="MinHeight" Value="20"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<StackPanel>
<TextBlock Text="{Binding Path=Name}"/>
<ItemsPresenter/>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</ListBox.GroupStyle>
Спасибо за любую помощь.