2012-09-20 43 views
1

我实现了CustomDataTemplateSelector喜欢这里:​​。但是,在我的解决办法只有一个,通过所有的DataTemplates改变部分的DataTemplates的其他部分是共同的:复杂数据模板

<local:MyTemplateSelector Content="{Binding}"> 
    <local:MyTemplateSelector.OneTemplate> 
     <DataTemplate> 
      <Grid Orientation="Horizontal" > 
       <Grid x:Name="Grid1"> 
        <Image Height="60" Width="60" Source="{Binding Photo}"/> 
       </Grid> 
       <Grid> 
        <TextBlock Text="{Binding TextValue1}"> 
        <TextBlock Text="{Binding TextValue2}"> 
       </Grid> 
      </Grid> 
     </DataTemplate> 
    </local:MyTemplateSelector.OneTemplate> 
    <local:MyTemplateSelector.AnotherTemplate> 
     <DataTemplate> 
      <Grid Orientation="Horizontal" > 
       <Grid x:Name="Grid2"> 
        <Image Height="30" Width="60" Source="{Binding Photos[0]}"/> 
        <Image Height="30" Width="60" Source="{Binding Photos[1]}"/> 
       </Grid> 
       <Grid> 
        <TextBlock Text="{Binding TextValue1}"> 
        <TextBlock Text="{Binding TextValue2}"> 
       </Grid> 
      </Grid> 
     </DataTemplate> 
    </local:MyTemplateSelector.AnotherTemplate> 
</local:MyTemplateSelector> 

这里GRID1GRID2是不同的部分。是否有可能“拆分”这些DataTemplates?

回答

1

尝试类似声明的公用部分资源并将其绑定到一个ContentPresenter:

<DataTemplate x:Key="CommonPart"> 
    <Grid > 
     <TextBlock Text="{Binding TextValue1}"> 
     <TextBlock Text="{Binding TextValue2}"> 
    </Grid> 
</DataTemplate> 

<local:MyTemplateSelector Content="{Binding}"> 
<local:MyTemplateSelector.OneTemplate> 
<DataTemplate> 
    <Grid Orientation="Horizontal" > 
     <Grid x:Name="Grid1"> 
     <Image Height="60" Width="60" Source="{Binding Photo}"/> 
     </Grid> 
     <ContentPresenter ContentTemplate="{StaticResource CommonPart}" />     
    </Grid> 
</DataTemplate> 
</local:MyTemplateSelector.OneTemplate> 
<local:MyTemplateSelector.AnotherTemplate> 
<DataTemplate> 
    <Grid Orientation="Horizontal" > 
     <Grid x:Name="Grid2"> 
     <Image Height="30" Width="60" Source="{Binding Photos[0]}"/> 
     <Image Height="30" Width="60" Source="{Binding Photos[1]}"/> 
     </Grid> 
     <ContentPresenter ContentTemplate="{StaticResource CommonPart}" /> 
    </Grid> 
</DataTemplate> 
</local:MyTemplateSelector.AnotherTemplate> 
</local:MyTemplateSelector> 
+0

在这种情况下,绑定不起作用。 – Buddy

+0

如果设置Content =“{Binding}”,它就会工作。 – Buddy

+0

对不起,我忘了设置内容属性!很高兴您将其标记为已接受! – michele