Использование MultiBinding при настройке заголовка DataGridColum

Я настраиваю DataGridColumns ListView.

У меня много ситуаций:

Иногда заголовок столбца представляет собой одно слово "Id", в данном случае я использую этот код:

<GridViewColumn Width="Auto"
                DisplayMemberBinding="{Binding Id}"
                Header="Id" />

2 - иногда заголовок столбца состоит из множества слов, в этом случае я отображаю их в нескольких строках, используя TextBlock с TextWrapping:

<GridViewColumn Width="85"
                DisplayMemberBinding="{Binding ManyWordsColumnHeader}" >
    <GridViewColumnHeader>
        <TextBlock Text="Many words column header"
                   TextWrapping="Wrap" />
    </GridViewColumnHeader>
</GridViewColumn>

3 - иногда содержимое строк является многосвязным (много свойств одновременно), например:

<GridViewColumn Header="Fist name & last name">
    <GridViewColumn.CellTemplate>
        <DataTemplate DataType="models:PersonClass">
            <TextBlock>
                <TextBlock.Text>
                    <MultiBinding StringFormat="{}{0} {1}">
                        <Binding Path="FirstName" />
                        <Binding Path="LastName" />
                    </MultiBinding>
                </TextBlock.Text>
            </TextBlock>
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>

Что мне делать, если у меня есть заголовок столбца, состоящий из множества слов, а содержимое строки должно быть связано со многими свойствами?

Другими словами: я хочу совместить второй и третий случай вместе!

2 ответа

Решение

Я действительно не играл с GridView, но этот подход кажется логичным для меня попробовать (на всякий случай, если вы этого не сделали). Просто объедините XAML из пункта 3 с пунктом 2:

<GridViewColumn Width="85" >
    <GridViewColumn.CellTemplate>
        <DataTemplate DataType="models:PersonClass">
            <TextBlock>
                <TextBlock.Text>
                    <MultiBinding StringFormat="{}{0} {1}">
                        <Binding Path="FirstName" />
                        <Binding Path="LastName" />
                    </MultiBinding>
                </TextBlock.Text>
            </TextBlock>
        </DataTemplate>
    </GridViewColumn.CellTemplate>
    <GridViewColumnHeader>
        <TextBlock Text="Many words column header"
                   TextWrapping="Wrap" />
    </GridViewColumnHeader>
</GridViewColumn>

Там у вас есть столбец с "именем заголовка столбца, состоящим из множества слов и содержимого строки, объединенной со многими свойствами".

У вас есть несколько вариантов здесь.

  1. Измените содержимое вашего заголовка на ListView, а для ItemSource укажите список строк заголовков.

  2. Добавить MultiValueConverter это берет все значения от всей привязки и возвращает строку, ограниченную Environment.NewLine.

Другие вопросы по тегам