我想在另一个datatemplate

时间:2016-09-28 03:10:42

标签: wpf

我有一个DataGrid的视图模型,如下所示:

public class Cell
{
    public CellValue CellValue { get; }
}

CellValue属性可以有几种类型:

public class CellValue
{
    public double Value { get; }
}

public class TwoValueCell : CellValue
{
    public double Value2 { get; }
}

DataGrid将ItemsSource绑定到我的行和单元格列表。

DataGrid按预期绑定数据:我在每个DataGridCell中获得一个Cell。所以我在这样的资源中有一种风格(现在的本地资源):

<DataGrid.Resources>
    <Style TargetType="{x:Type DataGridCell}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type DataGridCell}">
                    <ContentPresenter x:Name="ContentHost"
                            Margin="{TemplateBinding Padding}"/>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    <DataTemplate DataType="{x:Type viewModel:Cell}">
        <Grid>
            <TextBlock Text="{Binding CellValue}"/>
        </Grid>
    </DataTemplate>
</DataGrid.Resources>

我喜欢将模板绑定到视图模型类型...

问题是:而不是TextBlock上的Binding,我想在那里膨胀另一个DataTemplate,我可以通过特定的CellValue类型再次定义。

换句话说,在psudocode中它可能如下所示:

<DataTemplate DataType="{x:Type viewModel:Cell}">
    <Grid>
        <DataTemplate DataType="{x:Type viewModel:CellValue}">
            <TextBlock Text="{Binding Value}"/>
        </DataTemplate>
    </Grid>
</DataTemplate>

但我需要在某处定义特定的CellValue数据模板......

底线是DataGridCell有一个Type--并且有一个该类型的数据模板---但是在单元格的属性上有几个特定的​​类型,我想基于定义自定义数据模板关于物业的实际类型。

任何帮助?

1 个答案:

答案 0 :(得分:1)

您可以使用ContentControl。

QuickSort