我有一个分组的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”属性,虽然这会使模型膨胀,但我希望有更直接的方法来执行此操作。
答案 0 :(得分:3)
CollectionViewGroup使您可以访问该组中包含的所有项目。如果要从模板中访问其他信息,可以尝试使用RelativSource进行绑定。
编辑:
所以如果你有ItemVM的集合,那么在ItemVM.GroupProperty上有一个CollectionViewGroup。然后,您可以使用
访问组内的第一个ItemVM Binding={ Path = Items[0].AnyPropertyOnItemVM }
我认为如果你想用GroupItems计算或做任何事情,你将不得不使用转换器