Multi-row ListView column header with various data types in ItemSource

Continuation of this issue.

I want to implement this type ListView:

It should have 2 things:

  • Multi-line column header
  • Different types of data connected through ItemsSourcewill be displayed differently.

To solve (1), I am trying to use HeaderTemplate:

<ListView>
    <ListView.View>
        <GridView>
            <GridViewColumn Header="A" DisplayMemberBinding="{Binding A}">
                <GridViewColumn.HeaderTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding}"/>
                    </DataTemplate>
                </GridViewColumn.HeaderTemplate>
            </GridViewColumn>
...

DataTemplate might be more complicated:

<DataTemplate>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <TextBlock Text="{Binding}" HorizontalAlignment="Center"/>
        <GridViewHeaderRowPresenter Grid.Row="1" Columns="{StaticResource ResourceKey=aaa}"/>
    </Grid>
</DataTemplate>

Where aaais the key to some GridViewColumnCollection:

<GridViewColumnCollection x:Key="aaa">
    <GridViewColumn Header="B" DisplayMemberBinding="{Binding B}"/>
    <GridViewColumn Header="C" DisplayMemberBinding="{Binding C}"/>
 </GridViewColumnCollection>

This, however, leads to poor results:

It looks ugly when you click, resizing Bwill only change C, but not A.

Question: How to create a multi-line column header?


(2), item Mode ( 2 - :

<ListView.ItemContainerStyle>
    <Style TargetType="ListViewItem">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Mode}" Value="2">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="ListViewItem">
                            <StackPanel x:Name="PART_Panel" Orientation="Horizontal">
                                <TextBlock Text="{Binding D}"/>
                                <TextBlock Text="{Binding E}" Margin="5,0"/>
                            </StackPanel>
...

, ObservableCollection<object> ( A, B, C D, E, Mode), ..

Mode = 2. ListView ( Vista) , Mode != 2 . , Mode = 2 :

A-AA ( ), B-BB ( , , ).

, , ? ? Vista! ListViewItem:

<ControlTemplate.Triggers>
    <Trigger Property="Selector.IsSelected" Value="True">
        <Setter Property="Background" TargetName="PART_Panel">
            <Setter.Value>
                <DynamicResource ResourceKey="{x:Static SystemColors.HighlightBrushKey}" />
            </Setter.Value>
        </Setter>
...

... :

: 2-22-222 ( Vista) A-AA .

: , ItemSource? Vista?

P.S.: ( ) . , ListView, , ( - , , ).

+4

All Articles