我正在尝试在DataGrid中对项目进行分组,并在标题中显示它正在分组的字段的值。例如:
福特 - 3项 F150 野马 雪佛兰 - 2项我看过的每个例子都向我展示了完全相同的东西,对我来说似乎根本不起作用。
<DataGrid IsSynchronizedWithCurrentItem="True" SelectionUnit="FullRow" RowHeaderWidth="0" VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Visible" IsReadOnly="True" ItemsSource="{Binding View}" SelectedItem="{Binding Path=SelectedContingency, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="False" >
<DataGrid.GroupStyle>
<GroupStyle>
<GroupStyle.Panel>
<ItemsPanelTemplate>
<DataGridRowsPresenter/>
</ItemsPanelTemplate>
</GroupStyle.Panel>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Expander>
<Expander.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text=" wtf " />
<TextBlock Text="{Binding Path=Description, RelativeSource={RelativeSource AncestorType=DataGrid}}" />
<TextBlock Text="{Binding Path=ItemCount}"/>
<TextBlock Text=" Items" />
</StackPanel>
</Expander.Header>
<ItemsPresenter />
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</DataGrid.GroupStyle>
也有一段时间,但没有区别
<GroupStyle.HeaderTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Path=Description}" />
</StackPanel>
</DataTemplate>
</GroupStyle.HeaderTemplate>
而不是在这里得到描述我得到(wtf 3项目)等。我尝试了不同的领域,没有。我已经尝试了我能想到的exapander标题中的每个变体。
使这个共同特征功能需要什么魔力?
答案 0 :(得分:0)
答案是,在示例中,它们绑定到字段名称。所以当你在例子中看到时:
<Expander.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Name"} />
<TextBlock Text="{Binding Path=ItemCount}"/>
<TextBlock Text=" Items" />
</StackPanel>
</Expander.Header>
你可能会假设我使用了“Name”,因为那也是他们选择绑定的字段。不是这种情况。 “Name”是您绑定到的具有值的GroupItem上的实际属性。
因此,无论您在哪个Field上进行分组,都始终通过绑定到GroupItem上的“Name”来显示该字段。