У меня есть сгруппированная WPF DataGrid (стандартная Microsoft), представляющая некоторые данные пользовательского интерфейса для наших пользователей.
Чтобы показать итоги в сгруппированных регионах, мы переопределяем шаблон данных GroupItem следующим образом в XAML:
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Border BorderBrush="DarkGray" BorderThickness="1" Padding="12,0">
<Expander VerticalContentAlignment="Center" IsExpanded="{Binding ., Converter={Converters:ExpandedGroupConverter}}" ExpandDirection="Up">
<Expander.Header>
<Canvas>
**<TextBlock Text="{Binding} />**
</Canvas>
</Expander.Header>
<ItemsPresenter/>
</Expander>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
В настоящее время во время выполнения текст TextBlock привязывается к DataContext, который представляет собой CollectionViewGroup, что имеет смысл, поскольку сетка привязывается к CollectionView, охватывающему наш источник данных.
Однако CollectionViewGroup очень ограничена и не дает нам доступа к содержащему ее ViewModel, где мы храним свойства, например, для расположения групп (мы собираем координаты из столбцов, когда мы сначала размечаем сетку), и нам нужно привязать их, чтобы мы могли, например, показать итоговое значение непосредственно над / под данным столбцом в группе.
Короче говоря, мы пытаемся получить доступ не только к объекту CollectionView из DataTemplate, который нацелен на GroupItem. Любой вклад в то, как это сделать (или, если есть лучший подход, чтобы получить итоговые итоги по столбцам для отображения в шаблонах итогов группы), приветствуется.
РЕДАКТИРОВАТЬ: Пока что обходной путь должен иметь свойство "Parent ViewModel" на наших элементах, хотя это раздувает модель, я хотел бы, чтобы был более прямой способ сделать это.