Wpf ListView Группировка Динамическая Сетка Данных

Я хочу видеть некоторые "серии" в "TreeView", и я хочу поместить "динамическое представление сетки" в серию... Так что у меня есть DynamicDatagrid, который я заполняю в моей модели представления. это нормально:

public class Column
{
    public int Id {get; set; }
    public string Name { get; set; }
    public ObservableCollection<Cell> ColumnsData { get; set; }
}

public class DynamicDataGrid
{
    public ObservableCollection<Column> Columns { get; set; }

    public ObservableCollection<Cell> Headers { get; set; }

    public DynamicDataGrid()
    {
        Columns = new ObservableCollection<Column>();
        Headers = new ObservableCollection<Cell>();
    }
}

Я хочу создать x "Series", которая содержит динамическую сетку, чтобы увидеть x строк с n столбцами, и я хочу иметь возможность группировать по имени серии, как это (в примере я добавил только одну строку для серии):

По моему Xaml:

    <CollectionViewSource x:Key="Test" Source="{Binding         
    Path=TestViewModel.Columns}">
            <CollectionViewSource.GroupDescriptions>  
                <PropertyGroupDescription PropertyName="Name" />
            </CollectionViewSource.GroupDescriptions>
    </CollectionViewSource>

    <ListView  DataContext="{StaticResource Test}"
            ItemsSource="{Binding }" 
            Padding="0,0,0,10">
            <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>
                                                    <TextBlock FontWeight="Bold"
                                                               Text="Name: "/>
                                                    <TextBlock FontWeight="Bold"
                                                               Text="{Binding 
    Path=Name}"/>
                                                </DockPanel>
                                            </Expander.Header>
                                            <Expander.Content>
                                                <ItemsPresenter >
                                                </ItemsPresenter>
                                            </Expander.Content>
                                        </Expander>

                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </GroupStyle.ContainerStyle>
                </GroupStyle>
            </ListView.GroupStyle>


  <ListView.ItemTemplate>
                <DataTemplate>
                    <DataGrid x:Name="myGridView"
                              AutoGenerateColumns="False"
                              CanUserResizeRows="False"                              
                              CanUserAddRows="False"
                              CanUserReorderColumns="False"
                              CanUserDeleteRows="False"    
                              ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, 
                                                Path=DataContext.TestViewModel.DynamicDataGrid.Columns}">
                        <DataGrid.Columns>
                            <DataGridTemplateColumn>
                                <DataGridTemplateColumn.HeaderTemplate>
                                    <DataTemplate DataType="dynamicDataGrid:DynamicDataGrid">
                                        <ItemsControl 
                                            ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, 
                                                Path=DataContext.TestViewModel.DynamicDataGrid.Headers}">
                                            <ItemsControl.ItemsPanel>
                                                <ItemsPanelTemplate>
                                                    <StackPanel                                           
                                                        Orientation="Horizontal"/>
                                                </ItemsPanelTemplate>
                                            </ItemsControl.ItemsPanel>
                                            <ItemsControl.ItemTemplate>
                                                <DataTemplate DataType="wpfApp1:Cell">
                                                    <TextBlock Margin="2"
                                                               Width="{Binding ColWidth}" 
                                                               Foreground="{Binding ForeGround}" 
                                                               Text="{Binding Content}"/>
                                                </DataTemplate>
                                            </ItemsControl.ItemTemplate>
                                        </ItemsControl>
                                    </DataTemplate>
                                </DataGridTemplateColumn.HeaderTemplate>

                                <DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate DataType="dynamicDataGrid:Column">
                                        <ItemsControl  ItemsSource="{Binding ColumnsData }">
                                            <ItemsControl.ItemsPanel>
                                                <ItemsPanelTemplate>
                                                    <StackPanel Orientation="Horizontal"/>
                                                </ItemsPanelTemplate>
                                            </ItemsControl.ItemsPanel>
                                            <ItemsControl.ItemTemplate>
                                                <DataTemplate>
                                                    <StackPanel>
                                                        <TextBlock Margin="2" Width="{Binding ColWidth}" Text="{Binding Content}"/>
                                                    </StackPanel>
                                                </DataTemplate>
                                            </ItemsControl.ItemTemplate>
                                        </ItemsControl>
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellTemplate>
                            </DataGridTemplateColumn>
                        </DataGrid.Columns>
                    </DataGrid>

Я использую ListView и groupBy Название серии. Но для каждой серии элемент повторяет все 3 столбца... (кажется, это разрыв "группировки"). Я думаю, это потому, что ListView.ItemTemplate имеет весь ItemsSource, а не только совпадающие столбцы.

Результат КО:-(:

Я не знаю, как решить это дело Заранее спасибо!

0 ответов

Другие вопросы по тегам