Скрыть пустую группу в WPF ListBox - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь дополнительно настроить встроенную возможность 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>

Спасибо за любую помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...