Как показать группировку в сетке данных WPF с несколькими уровнями? - PullRequest
3 голосов
/ 08 мая 2010

Я относительно новичок в WPF, поэтому я понимаю стили и сеттеры, но у меня возникают проблемы с этим.

Я использую таблицу данных WPF и мне нужно показать несколько уровней группировки. Мне бы хотелось, чтобы уровни 2-й и 3-й групп были больше отступов, чем у верхнего уровня.

Следующий код покажет уровни групп, но он показывает их один над другим и делает невозможным сказать, что это вложенные уровни групп.

</p> <pre><code><Style x:Key="GroupHeaderStyle" TargetType="{x:Type GroupItem}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type GroupItem}"> <Expander IsExpanded="True"> <Expander.Header> <TextBlock Text="{Binding Path=Name}"/> </Expander.Header> <ItemsPresenter /> </Expander> </ControlTemplate> </Setter.Value> </Setter> </Style>

Как мне получить заголовок группы для отступа на основе уровня?

Ответы [ 5 ]

4 голосов
/ 27 января 2015

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

Добавьте свойство в CollectionViewSource:

<Window.Resources>
    <CollectionViewSource x:Key="cvs" Source="{Binding TestData}">
        <CollectionViewSource.GroupDescriptions>
            <PropertyGroupDescription PropertyName="TopProperty"/>
            <PropertyGroupDescription PropertyName="SubProperty"/>
        </CollectionViewSource.GroupDescriptions>
    </CollectionViewSource>
</Window.Resources>

Затем вВ DataGrid XAML необходимо указать 2 GroupStyles, а второй будет использоваться для вложенной группы.Я добавил поля в StackPanel второй группы, чтобы сдвинуть текст вправо, чтобы он выглядел так, как будто он находится в соответствующем столбце.

<DataGrid.GroupStyle>
            <GroupStyle>
                <GroupStyle.ContainerStyle>
                    <Style TargetType="{x:Type GroupItem}">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="{x:Type GroupItem}">
                                    <StackPanel>
                                        <Border Background="#FF959595" BorderBrush="#FF727272" BorderThickness="0,0,0,1" Margin="5,0,0,0">                                            
                                            <StackPanel   Height="23" Orientation="Horizontal" Margin="3,0,0,0" Background="#FFE6E6E6">
                                                <TextBlock FontWeight="Bold"  Text="{Binding Path=Name}" Margin="5,0,0,0" Width="100" VerticalAlignment="Center"/>
                                            </StackPanel>
                                        </Border>
                                            <ItemsPresenter />
                                    </StackPanel>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </GroupStyle.ContainerStyle>
            </GroupStyle>
            <GroupStyle>
                <GroupStyle.HeaderTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <Border Background="#FF959595" BorderBrush="#FF727272" BorderThickness="0,0,0,1" Margin="5,0,0,0">
                                <StackPanel   Height="23" Orientation="Horizontal" Margin="3,0,0,0" Background="#FFF3F3F3">
                                    <TextBlock FontWeight="Bold"  Text="{Binding Path=Name}" Margin="55,0,0,0" Width="100" VerticalAlignment="Center"/>
                                </StackPanel>
                            </Border>
                        </StackPanel>
                    </DataTemplate>
                </GroupStyle.HeaderTemplate>
            </GroupStyle>
</DataGrid.GroupStyle>

Здесь я смог найти больше информации: https://msdn.microsoft.com/en-us/library/ff407126%28v=vs.110%29.aspx

2 голосов
/ 20 сентября 2010

У меня была та же проблема, и я нашел несовершенный обходной путь. Если вы добавляете поле слева от вашего ItemsPresenter, каждый уровень имеет отступ, как и следовало ожидать. К сожалению, заголовки столбцов больше не выровнены по столбцам содержимого. Я все еще ищу решение для этого ...

1 голос
/ 12 мая 2010

Насколько я знаю (или последний раз, когда я проверял), WPF Datagrid не поддерживает иерархическую группировку.

Самым близким, что я смог найти, было это .

Вот почему мы использовали Xceed DataGrid в нашем приложении. К сожалению, это не бесплатно, так что может не подойти вам.

0 голосов
/ 03 апреля 2011

Этот учебник идет в правильном направлении: Мультигруппировка в DataGrid Но, к сожалению, PagedCollectionView - это Silverlight.

0 голосов
/ 08 мая 2010

Я уже использую ICollectionView и PropertyGroupDescription для добавления группировки, однако вы все равно должны использовать XAML, чтобы описать, как будет отображаться группировка, в противном случае вы не получите индикации пользовательского интерфейса группировки.

Меня интересует, как настроить XAML таким образом, чтобы я мог представлять несколько уровней группировки, предпочтительно с некоторыми отступами на уровне группы или чем-то в этом роде ...

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