在自定义DataGridColumnheader时使用MultiBinding

时间:2014-02-28 13:49:10

标签: c# wpf xaml multibinding gridviewcolumn

我正在使用ListView的DataGridColumns。

我有很多情况:

1 - somtimes,列标题只是一个单词'Id',在这种情况下我使用此代码:

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

2-有时,列标题由许多单词组成,在这种情况下,我使用带有TextWrapping的TextBlock以多行显示它们:

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

3-有时候,这些行的内容是Multibinded(同时有很多属性),如下所示:

<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 个答案:

答案 0 :(得分:1)

我还没有真正玩过GridView,但这种做法对我来说似乎合情合理(万一你还没有)。只需将第3点的XAML与第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 :(得分:0)

你有几个选择。

  1. 将标题的内容更改为ListView,使用 ItemSource设置为标题行列表。

  2. 添加MultiValueConverter,其中包含所有值中的所有值 绑定并返回由Environment.NewLine分隔的字符串。