Использование 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>
Там у вас есть столбец с "именем заголовка столбца, состоящим из множества слов и содержимого строки, объединенной со многими свойствами".
У вас есть несколько вариантов здесь.
Измените содержимое вашего заголовка на ListView, а для ItemSource укажите список строк заголовков.
Добавить
MultiValueConverter
это берет все значения от всей привязки и возвращает строку, ограниченную Environment.NewLine.