Implicit DataTemplate doesn't work

匿名 (未验证) 提交于 2019-12-03 02:24:01

问题:

Why does the following implicit DataTemplate not work? Only the commented inline DataTemplate will work.

Note: If I remove both DataTemplates, I see a string representation of the ProductListView full type name.

<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> 

回答1:

DataType requires the use of x:Type as the property's type is Object, so if you type DataType="ns:Type" you set it to the string "ns:Type". If the property's type were Type (as with Style.TargetType for example) the XAML processor would automatically convert that string to a Type.

Thus here you should write:

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

(The property type is Object to allow data-templating of XML data, see the documentation for more information on that)



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!