Сгруппированный ListView с флажком в заголовке - PullRequest
0 голосов
/ 06 сентября 2011

У меня есть ListView, связанный с некоторыми данными, и он сгруппирован и отсортирован.Я добавил флажок в заголовок группировки следующим образом:

            <ListView.GroupStyle>
            <GroupStyle>
                <GroupStyle.ContainerStyle>
                    <Style TargetType="{x:Type GroupItem}">
                        <Setter Property="Margin" Value="0,0,0,5"/>
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="{x:Type GroupItem}">
                                    <Expander IsExpanded="True" BorderBrush="#FFA4B97F" BorderThickness="0,0,0,1">
                                        <Expander.Header>
                                            <DockPanel>
                                                <CheckBox>
                                                    <StackPanel Orientation="Horizontal">
                                                        <TextBlock FontWeight="Bold" Text="{Binding Path=Name}" Margin="5,0,0,0"/>
                                                        <TextBlock Text=" ("/>
                                                        <TextBlock Text="{Binding Path=ItemCount}"/>
                                                        <TextBlock Text=" Items)"/>
                                                    </StackPanel>
                                                </CheckBox>
                                            </DockPanel>
                                        </Expander.Header>
                                        <Expander.Content>
                                            <ItemsPresenter />
                                        </Expander.Content>
                                    </Expander>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </GroupStyle.ContainerStyle>
            </GroupStyle>
        </ListView.GroupStyle>

Теперь мне нужен только и мне нужен способ перебрать сгруппированные элементы, у которых проверен заголовок, как лучше всего это сделать?

1 Ответ

1 голос
/ 06 сентября 2011

К сожалению, это не так просто, как должно быть,

Помните, что заголовок группы CheckBox имеет DataContext, который представляет собой особый вид объекта с именем GroupItem. В этом GroupItem есть свойство Name, которое представляет собой значение, которое группа представляет, т.е. общее значение, на основании которого произошла группировка.

Многие люди путают это со свойством описания группы, например, Если вы добавили GroupDescription со свойством EmployeeStatus в число ваших CollectionView сотрудников, то GroupItem.Name НЕ будет EmployeeStatus, но на самом деле это значение, по которому была создана группа, например Present, Absent, OnLeave и т. Д.

Имея это знание, давайте попробуем достичь того, что вы ищете ...

  1. Мы называем флажок заголовка, скажем «HeaderCheckBox»

    <CheckBox x:Name="HeaderCheckBox" ...>
    
  2. Мы обрабатываем Button.Click (пузырьковое вложенное событие) на уровне ListView.

    <ListView Button.Click="HandleCheckBoxClick" ...>
    
  3. В обработчике HandleButtonClick мы делаем следующий код ....

    private void HandleCheckBoxClick(object sender, RoutedEventArgs e)
    {
        var checkBox = e.OriginalSource as CheckBox;
        if (checkBox != null && checkBox.Name == "HeaderCheckBox")
        {
            var groupItem = checkBox.DataContext as GroupItem;
    
            //// Assuming MyItem is the item level class and MyGroupedProperty 
            //// is the grouped property that you have added to the grouped
            //// description in your CollectionView.
            foreach (MyItem item in groupItem.Items)
            {
                 //// Place your code for the items under that particular group.
            }
        }
    } 
    

К сожалению, это единственный способ достичь того, что вы ищете. Если вы используете MVVM, весь код должен быть выполнен с помощью прикрепленного поведения.

Дайте мне знать, если это поможет.

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