数据模板和子DataTemplate

时间:2012-09-30 05:35:10

标签: c# wpf datatemplate itemscontrol

我有一个WPF的项目。如何在其上使用Data Template和子Data Template

我的项目中有以下课程。

public abstract Class X
public Class A: X
public Class B: X
public Class C: X

并在XAML文件中使用以下代码:

<DataTemplate DataType="{x:Type A}">
...
</DataTemplate>

<DataTemplate DataType="{x:Type B}">
...
</DataTemplate>

<DataTemplate DataType="{x:Type C}">
...
</DataTemplate>

<DataTemplate DataType="{x:Type X}" x:Key="xdatatemplate">
...
<!-- use datatemplate of A,B or C --!>
...
</DataTemplate>


<ItemsControl ItemTemplate="{StaticResource xdatatemplate}"/>

我想在我的ItemsControl的Itemtemplate中使用xdatatemplate。 ItemsSource项目的类型为A,B或C.并且我的数据模板的一部分在类型A,类型B和类型C之间是不同的。如何在X DataTemplate上使用A,B和C子DataTemplate?

我可以将ItemTemplateSelector用于此目的吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

如果xdatatemplate仅通过其DataType选择子DataTemplate,那么您可以这样做:

<DataTemplate DataType="{x:Type X}" x:Key="xdatatemplate">
  <Grid>
    <ContentControl Content="{Binding}" />
    <!-- Other content -->
  <Grid>
</DataTemplate>

但是,如果您需要更复杂的子DataTemplate选择逻辑,则应使用ContentTemplateSelector

<local:MyTemplateSelector x:Key="MyTemplateSelector" />

<DataTemplate DataType="{x:Type X}" x:Key="xdatatemplate">
  <Grid>
    <ContentControl Content="{Binding}" ContentTemplateSelector="{StaticResource MyTemplateSelector}" />
    <!-- Other content -->
  <Grid>
</DataTemplate>