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, а не только совпадающие столбцы.
Я не знаю, как решить это дело Заранее спасибо!