Заголовок расширителя данных (из группировки) - PullRequest
2 голосов
/ 21 марта 2012

После этого урока у меня была идея добавить в Expander Header больше данных.У меня есть 2 таблицы (Документ 1 - * Запись).Я отображаю записи, сгруппированные по документам, и не хочу, чтобы некоторые данные повторялись в сетке данных, поэтому я решил поместить их в заголовок расширителя.

<DataGrid.GroupStyle>
            <GroupStyle>
                <GroupStyle.HeaderTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <TextBlock Text="{Binding Path=Name}" />
                        </StackPanel>
                    </DataTemplate>
                </GroupStyle.HeaderTemplate>
                <GroupStyle.ContainerStyle>
                    <Style TargetType="{x:Type GroupItem}">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="{x:Type GroupItem}">
                                    <Expander IsExpanded="True">
                                        <Expander.Header>
                                            <StackPanel Orientation="Horizontal">
                                                <TextBlock Text="{Binding Path=Name}" />
                                                <TextBlock Text=" - "/>
                                                **<TextBlock Text="{Binding Path=Document.Number or Name2}"/>**
                                            </StackPanel>
                                            ...

1 Ответ

3 голосов
/ 29 апреля 2012

Вы можете сделать это:

<Expander.Header>
<StackPanel Orientation="Horizontal">
    <TextBlock Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type GroupItem}}, Converter={StaticResource ResourceKey=groupToTitleConverter}}" />
</StackPanel> </Expander.Header>

Конвертер:

public class GroupToTitleConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        GroupItem groupItem = value as GroupItem;
        CollectionViewGroup collectionViewGroup = groupItem.Content as CollectionViewGroup;
        EntryViewModel entryViewModel = collectionViewGroup.Items[0] as EntryViewModel;
        string title = string.Format("{0} - {1} {2}", entryViewModel.Id, entryViewModel.Numar, entryViewModel.Obiect);
        return title;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

Принятие первого элемента из группы в группу для формирования заголовка заголовка может быть не самым элегантным решением, но оно подойдетцель.

Полный код доступен здесь: ExpanderHeadersInDataGridGroupStyle.zip

...