Сценарий: таблица данных для отображения пользовательских событий из пользовательских источников.Сетка должна группировать строки по источнику, упорядочивая события по дате и времени по убыванию (более новые всегда сверху).Ручная сортировка не разрешена, виртуализация включена, шаблон MVVM.Вот моя проблема: сам заголовок группы должен следовать порядку даты и времени, то есть группа, связывающаяся с последним событием, должна масштабироваться до верха.
ViewModel:
public class Event
{
public Int32 Source_Id { get; set; }
public String Source_Name { get; set; }
public DateTime Event_DateTime { get; set; }
}
CollectionView сгруппирован по Source_Id иотсортировано по Event_DateTime:
<CollectionViewSource x:Key='alarms_src' Source="{Binding Alarms}">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="Source_Id" />
</CollectionViewSource.GroupDescriptions>
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="Event_DateTime" Direction="Descending" />
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
GroupStyle - это простой расширитель с именем источника и датой и временем последнего события в заголовке:
<DataGrid.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Margin" Value="4"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Expander IsExpanded="True" Background="LightGray">
<Expander.Header>
<StackPanel Orientation="Horizontal" Background="Transparent">
<TextBlock Margin="8" Text="{Binding Items[0].Source_Name}"/>
<TextBlock Margin="8" Text="{Binding Items[0].Event_DateTime}"/>
</StackPanel>
</Expander.Header>
<Expander.Content>
<ItemsPresenter/>
</Expander.Content>
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</DataGrid.GroupStyle>
Вывод: упрощенная сетка
Красные стрелки на изображении указывают на 4-ую сгенерированную мной строку с последней отметкой времени.Сетка правильно группирует и сортирует ВНУТРИ каждой группы, но я ожидаю, что группа Device_1 будет масштабироваться в верхней части сетки: как это получить?
Обновление: ссылка для переноса данных на образец проекта