2011-11-13 18 views
8

¿Por qué no funciona el siguiente implícito DataTemplate? Solo el comentario en línea DataTemplate funcionará.Implícito DataTemplate no funciona

Nota: Si elimino ambos DataTemplate s, veo una representación de cadena del nombre completo ProductListView.

<Window.Resources> 
    <DataTemplate DataType="vm:ProductListViewModel"> 
    <v:ProductListView/> 
    </DataTemplate> 
</Window.Resources> 

<TabControl ItemsSource="{Binding Tabs}" TabStripPlacement="Left"> 
    <TabControl.ItemTemplate>  
    <DataTemplate> 
     <TextBlock Text="{Binding Key}"/> 
    </DataTemplate>   
    </TabControl.ItemTemplate> 
    <TabControl.ContentTemplate> 
    <DataTemplate> 
     <ContentPresenter Content="{Binding Value}"> 

     <!--ContentPresenter.ContentTemplate> 
      <DataTemplate DataType="vm:ProductListViewModel"> 
      <v:ProductListView/> 
      </DataTemplate> 
     </ContentPresenter.ContentTemplate--> 

     </ContentPresenter> 
    </DataTemplate> 
    </TabControl.ContentTemplate> 
</TabControl> 

Respuesta

11

DataType requiere el uso de x:Type como tipo de la propiedad es Object, por lo que si se escribe DataType="ns:Type" lo establece en la cadena "ns:Type". Si el tipo de propiedad fuera Type (como con Style.TargetType por ejemplo), el procesador XAML convertiría automáticamente ese string a Type.

Por lo tanto aquí se debe escribir:

<DataTemplate DataType="{x:Type vm:ProductListViewModel}"> 
    <v:ProductListView/> 
    </DataTemplate> 

(El tipo de propiedad es Object para permitir que datos de plantillas de datos XML, consulte la documentación para obtener más información sobre esto)

+0

Buena captura. Gracias. – Shimmy

Cuestiones relacionadas