我有一个分组的 WPF DataGrid(标准的 Microsoft 数据网格),为我们的用户代表 UI 上的一些数据。
为了显示分组区域内的总数,我们在 XAML 中重写 GroupItem DataTemplate,如下所示:
<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,我们在其中存储属性,例如放置组的位置(我们在第一次布局网格时从列中收集坐标),并且需要绑定到例如,我们可以在组中给定列的上方/下方显示总数。
简而言之,我们试图从以 GroupItem 为目标的 DataTemplate 中访问的不仅仅是 CollectionView 对象。任何有关如何执行此操作的输入(或者是否有更好的方法来获取每列的总和以显示在组总模板中)表示赞赏。
编辑:到目前为止,一种解决方法是在我们的项目上有一个“父 ViewModel”属性,虽然这会使模型膨胀,但我希望有一种更直接的方法来做到这一点。