Datagrid分组显示您作为标题分组的字段值

时间:2014-08-25 19:19:48

标签: c# wpf xaml datagrid

我正在尝试在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标题中的每个变体。

使这个共同特征功能需要什么魔力?

1 个答案:

答案 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”来显示该字段。