重用多种类型的数据模板?

时间:2013-09-04 17:47:12

标签: c# wpf wpfdatagrid datatemplate celltemplate

我有以下DataTemplate用于显示User个实例的全名:

<DataTemplate x:Key="NameCellTemplate">
    <Label HorizontalAlignment="Stretch" Height="25">
        <Label.Content>
            <MultiBinding 
                Converter="{StaticResource FullNameConverter}"
                ConverterParameter="{x:Static Conv:NameFormat.FirstThenLast}" >

                <!-- Requires binding to object of type 'User' -->
                <Binding Path="FirstName" />
                <Binding Path="LastName" />
            </MultiBinding>
        </Label.Content>
    </Label>
</DataTemplate>

我目前使用它来自定义模板列,如下所示:

<DataGridTemplateColumn 
    CellTemplate="{StaticResource NameCellTemplate}" />

此列属于一个充满User个实例的数据网格,但我想将数据模板重新用于不同数据网格中的列。第二个数据网格绑定到另一个类型,而不是User作为属性,所以我喜欢来执行此操作:

<DataGridTemplateColumn 
    Binding="{Binding Path=User}" 
    CellTemplate="{StaticResource NameCellTemplate}" />

但是,模板列不允许使用Binding属性。

如何为列模板指定绑定路径,或修改数据模板,以便数据模板可以重用于任一数据网格?

1 个答案:

答案 0 :(得分:2)

在这种情况下,由于datagrid行的datacontexts不同,因此您可以像这样应用模板:

<DataGridTemplateColumn>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <ContentControl Content="{Binding User}" 
                            ContentTemplate="{StaticResource NameCellTemplate}"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>